目录

  1. ASP.NET MVC搭建项目后台UI框架—1、后台主框架
  2. ASP.NET MVC搭建项目后台UI框架—2、菜单特效
  3. ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
  4. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持
  5. ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互
  6. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)
  7. ASP.NET MVC搭建项目后台UI框架—7、统计报表
  8. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
  9. ASP.NET MVC搭建项目后台UI框架—9、服务器端排序

现在,有一个需求,我需要将表格中选中行的数据中的一部分传直接传到控制器中,然后保存到另外一张表中。一开始,我就想到在前台使用ajax构造json数据,然后控制器直接通过list接收。

选中界面中的行,然后点击“批量添加到月结表”,弹出一个对话框,这个对话框的月份列表为当前选择数据行中结账日期所在月份、以及前一个月和后一个月,选择月份后,将选择的月份,以及界面选中的行中的数据一起传到控制器中去。我发现网上很少有这种在前台构造复杂json,传递给控制器的,更多的是从控制器调用Json方法把后台数据转换为json格式,然后展示到前台,所以我就把实现方式记录下来,希望能够给大家提供参考。

控制器Reconciliation代码:

        /// <summary>
/// 添加月结表
/// </summary>
/// <param name="no"></param>
/// <param name="date"></param>
/// <returns></returns>
public ActionResult AddMonthPayOff(DateTime payOffDate)
{
ViewBag.PreMonthStr = payOffDate.AddMonths(-).Month + "月";
ViewBag.MonthStr = payOffDate.Month + "月";
ViewBag.NextMonthStr = payOffDate.AddMonths().Month + "月"; ViewBag.PreYearMonth = payOffDate.AddMonths(-);
ViewBag.YearMonth = payOffDate;
ViewBag.NextYearMonth = payOffDate.AddMonths();
return View();
} /// <summary>
/// 添加月结表
/// </summary>
/// <param name="data"></param>
/// <param name="isNeglect">是否忽视异常</param>
/// <returns></returns>
[HttpPost]
public JsonResult AddMonthPayOff(List<MonthPayOffModel> data, bool isNeglect, DateTime payOffMonth)
{
string message = string.Empty;
var dealdata = data.Select(a => new MonthPayOffData()
{
MonthPayTime = payOffMonth,
ReconcileTime = a.ReconcileTime,
PreTotalCostFee = a.PreTotalCostFee,
TotalCostFee = a.TotalCostFee,
PreInComeFee = a.PreInComeFee,
InComeFee = a.InComeFee,
TotalMargin = a.TotalMargin,
LoadBillBy = LoadBillInCome.GetByLoadBillNum(a.LoadBillNum)
}).ToList();
if (MonthPayOff.AddMonthPay(isNeglect, dealdata, payOffMonth, out message))
{
return Json(new { IsSuccess = true, Message = string.Format("共计:{0}个提单添加到月结", data.Count) });
}
else
{
return Json(new { IsSuccess = false, Message = message, IsPoint = message.Substring(, ) == "提醒" ? true : false });
}
}

视图AddMonthPayOff:

@{
ViewBag.Title = "AddMonthPayOff";
Layout = null;
}
@Html.Raw(ViewBag.Msg)
<script src="~/Scripts/jquery-1.8.3.min.js"></script>
<link href="~/Content/main.css" rel="stylesheet" />
<style type="text/css">
table tr {
height:24px;
}
</style>
<script type="text/javascript">
function selectpayMonth() {
var list = $('input:radio[name="monthPayOff"]:checked').val();
if (list == null) {
return false;
}
else {
frameElement.api.opener.postSelectData(list,false);
}
}
</script> @using (Html.BeginForm("AddMonthPayOff", "Reconciliation", FormMethod.Post, new { @clase = "form-inline", @role = "form", name = "from1" }))
{
<table style="text-align:center;width:190px;margin-top:10px;">
<tr><td style="width:190px;"><input type="radio" name="monthPayOff" value="@ViewBag.PreYearMonth"/> @ViewBag.PreMonthStr</td></tr>
<tr><td><input type="radio" name="monthPayOff" value="@ViewBag.YearMonth"/> @ViewBag.MonthStr</td></tr>
<tr><td><input type="radio" name="monthPayOff" value="@ViewBag.NextYearMonth"/> @ViewBag.NextMonthStr</td></tr>
<tr><td><input type="button" value="确定" onclick="selectpayMonth()" class="popbtn1 mg" style="text-align:center;margin:10px 0 10px 10px !important;">
@*<input type="button" value="关闭" class="popbtn3 mg2" onclick="frameElement.api.opener.addDG.close();" />*@</td>
</tr>
</table>
}

主界面视图LoadBill:这里主要记录选中的行数据,然后将其构造成json格式,通过ajax传递给控制器,注意这里构造的json数据,和控制器中对应的接收参数是一致的。

   //添加到月结表 提单号,结算月份、包裹数、总成本、总收入、总毛利
function AddMonthlyBalance(id, date, ExpressCount, CostTotalFee, InComeTotalFee, GrossProfitRate) {
if (date == '') {
$.dialog.alert("提货单“"+id+"”数据未导入成本数据,且未清关");
return false;
}
var d = { isNeglect: false, data: [{"LoadBillNum": id, "ReconcileTime": date, "PreTotalCostFee": CostTotalFee,"TotalCostFee": CostTotalFee,"PreInComeFee":
InComeTotalFee,"InComeFee": InComeTotalFee,"TotalMargin": GrossProfitRate }] };
selectData = JSON.stringify(d);
addDG = $.dialog({
id: 'AddMonthPayList',
title: '添加到月结表',
width: 200,
height: 150,
content: "url:/Reconciliation/AddMonthPayOff?payOffDate="+date,
close: true,
btnBar: false,
max: false,
min: false,
lock: true
})
}

视图源码:

@{
ViewBag.Title = "提货单对账";
}
<link href="~/libs/DataTables-1.10.6/media/css/jquery.dataTablesNew.css" rel="stylesheet" />
<script src="~/libs/DataTables-1.10.6/media/js/jquery.dataTables.min.js"></script>
<script src="~/Scripts/DataTablesExt.js"></script>
<script src="~/libs/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript">
var selectData; //选择行数据
$(function () {
var table = $("#table_local").dataTable({
bProcessing: true,
"scrollY": table_h,
"scrollX": $(document).width(),
"scrollCollapse": "true",
"dom": 'tr<"bottom"lip><"clear">',
"bServerSide": true, //指定从服务器端获取数据
"iDisplayLength": 10,
sServerMethod: "POST",
showRowNumber:true,
sAjaxSource: "@Url.Action("LoadBillList", "Reconciliation")",
//"initComplete": function (data, args) {
// //getTotal(args);
// var arr = new Array(7,8,9,10,11,14,15,16,17,18); //页面一加载隐藏的列
// controlColumnShow(table, arr,false);
//},
"fnServerParams": function (aoData) { //查询条件
aoData.push(
{ "name": "CusName", "value": $("#CusName").val() },
{ "name": "LoadBillNum", "value": $("#LoadBillNum").val() },
{ "name": "CompletionSTime", "value": $("#CompletionSTime").val() },
{ "name": "CompletionETime ", "value": $("#CompletionETime").val() }
);
},
//跟数组下标一样,第一列从0开始,这里表格初始化时,第四列默认降序
"order": [[ 2, "asc" ]],
columns: [
{
"data": "ID", orderable: false,width:"60",
"render": function (data, type, row, meta) {
return " <input id='cbx" + data + "' type='checkbox' onclick='controlSelectAll(" + data + ")' class='cbx' value='" + data + "'/> " + row.Index;
}
},
{ "data": "CusName" }, //客户名称
{ "data": "LoadBillNum" },//提单号
{ "data": "FeeWeight", orderable: false }, //提单包裹重量
{ "data": "ExpressCount", orderable: false }, //提单包裹数量
{ "data": "CompletionTime" }, //清关完成时间
{ "data": "GroundHandlingFee", visible: false },//邮政地勤费
{ "data": "CostStoreFee", visible: false },//邮政仓租
{
"data": "CostExpressFee", orderable: false, visible: false, "render": function (data, type, row, meta) {
var css = "";
if (row.IsReal==0) {
css = " class='preColor'";
}
var re = "<div" + css + ">" + data + "</div>";
return re;
}
},//邮政邮资
{
"data": "CostOperateFee", orderable: false, visible: false, "render": function (data, type, row, meta) {
var css = "";
if (row.IsReal == 0) {
css = " class='preColor'";
}
var re = "<div" + css + ">" + data + "</div>";
return re;
}
},//邮件处理费
{ "data": "CostOtherFee", visible: false },//邮政其他费用
{ "data": "CostTotalFee" },//邮政总成本
{ "data": "CostStatus" },//邮政结算状态
{ "data": "InComeLoadFee", visible: false },//客户提货费
{ "data": "InComeStoreFee", visible: false },//客户仓租
{ "data": "InComeExpressFee", visible: false },//客户运费
{ "data": "InComeOperateFee", visible: false },//客户操作费
{ "data": "InComeOtherFee", visible: false },//其他费用
{ "data": "InComeTotalFee" },//总收入
{ "data": "InComeStatus",orderable: false ,width:"90"},//结算状态
{
"data": "TotalGrossProfit", orderable: false, "render": function (data, type, row, meta) {
var css = "";
if (data < 0) {
css=" class='numberColor'";
}
var re = "<div"+css+">"+data+"</div>";
return re;
}
},//总毛利
{
"data": "GrossProfitRate", orderable: false, "render": function (data, type, row, meta) {
var css = "";
if (data < 0) {
css = " class='numberColor'";
}
var re = "<div" + css + ">" + data + "%</div>";
return re;
}
},//毛利率
{ "data": "Status",width: "120", orderable: false },//对账单状态
{
"data": "LoadBillNum", orderable: false, width: "160", "render": function (data, type, row, meta) {
var re = "<div style='text-align:center'><a style='visibility:visible' onclick='openDetail(" + data + ")'>明细</a>&nbsp;&nbsp;";
if (row.IsAddMonthPayOff == 0) {
var reconcileDate = row.ReconcileDate == '' ? row.CompletionTime : row.ReconcileDate;
re += "<a style='visibility:visible' name='addMonthPayOff' onclick='AddMonthlyBalance(\"" + data + "\",\"" + reconcileDate + "\","
+ row.ExpressCount + "," + row.CostTotalFee + "," + row.InComeTotalFee + "," + row.TotalGrossProfit + ")'>添加到月结表</a>";
}
return re+"</div>";
}
}//操作
],
paging: true,//分页
ordering: true,//是否启用排序
searching: true,//搜索
language: {
"sProcessing": "处理中...",
lengthMenu: '每页显示:<select class="form-control input-xsmall">' + '<option value="10">10</option>' + '<option value="20">20</option>' + '<option value="30">30</option>'
+ '<option value="50">50</option>' + '<option value="100">100</option>' + '<option value="150">150</option>' + '<option value="200">200</option>'
+ '<option value="250">250</option>',//左上角的分页大小显示。
search: '<span class="label label-success">搜索:</span>',//右上角的搜索文本,可以写html标签 paginate: {//分页的样式内容。
previous: "上一页",
next: "下一页",
first: "",
last: ""
}, zeroRecords: "暂无记录",//table tbody内容为空时,tbody的内容。
//下面三者构成了总体的左下角的内容。
info: "总共 <span class='pagesStyle'>(_PAGES_) </span>页,显示 _START_ -- _END_ ,共<span class='recordsStyle'> (_TOTAL_)</span> 条",//左下角的信息显示,大写的词为关键字。初始_MAX_ 条
infoEmpty: "0条记录",//筛选为空时左下角的显示。
infoFiltered: ""//筛选之后的左下角筛选提示,
},
pagingType: "full_numbers"//分页样式的类型
});
//new $.fn.dataTable.FixedColumns(table);
//设置选中行样式
$('#table_local tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
}
else {
table.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
}
});
//展开折叠列
$("#imgIncome").click(function () {
var url = $("#imgIncome").attr("src");
var arr = new Array(8, 9, 10, 6,7);
if (url == "/images/icon_9.png") {
controlColumnShow(table, arr, true);
$("#imgIncome").attr("src", "/images/icon_10.png");
}
else {
controlColumnShow(table, arr, false);
$("#imgIncome").attr("src", "/images/icon_9.png");
} });
//收入展开折叠
$("#imgCost").click(function () {
var url = $("#imgCost").attr("src");
var arr = new Array(14,15,16, 17, 13);
if (url == "/images/icon_9.png") {
controlColumnShow(table, arr, true);
$("#imgCost").attr("src", "/images/icon_10.png");
}
else {
controlColumnShow(table, arr, false);
$("#imgCost").attr("src", "/images/icon_9.png");
}
});
//获取批量选择行
$("#btnAddMonthPayOffList").click(function () {
var nTrs = table.fnGetNodes();//fnGetNodes获取表格所有行,nTrs[i]表示第i行tr对象
var row;
selectData = "{'data': [";
var selectCounts = 0;
var date;
for (var i = 0; i < nTrs.length; i++) {
if ($(nTrs[i])[0].cells[0].children[0].checked) {
row = table.fnGetData(nTrs[i]);//fnGetData获取一行的数据
selectCounts++;
var tempdate = row.ReconcileDate == '' ? row.CompletionTime : row.ReconcileDate;
if (tempdate == '') {
$.dialog.alert("提货单“" + row.LoadBillNum + "”数据未导入成本数据,且未清关");
return false;
}
//当时间不统一时,获取最大时间
if (date == undefined || new Date(tempdate.replace("-", "/").replace("-", "/")) > new Date(date.replace("-", "/").replace("-", "/"))) {
date = tempdate;
}
selectData += "{'LoadBillNum':'" + row.LoadBillNum + "','ReconcileTime':'" + tempdate + "','PreTotalCostFee':'" + row.CostTotalFee
+"','TotalCostFee':'"+row.CostTotalFee+ "','PreInComeFee':'" + row.InComeTotalFee +"','InComeFee':'"+row.InComeTotalFee+ "','TotalMargin':'" + row.TotalGrossProfit + "'},";
}
}
selectData = selectData.substring(0, selectData.length - 1)
selectData += "]}";
if (selectCounts < 1) {
$.dialog.alert("请先选择要添加的数据行!");
return false;
}
AddMonthlyBalanceList(date);
});
});
function reloadList() {
var tables = $('#table_local').dataTable().api();//获取DataTables的Api,详见 http://www.datatables.net/reference/api/
tables.ajax.reload(function () {
//var json = tables.context[0].json;
//getTotal(json);
}, false);
}
//统计
function getTotal(json) {
if (json) {
if (json.TotalWeight) {
$("#spnTotalWeight").html(json.TotalWeight);
$("#spnTotalWayBillFee").html(json.TotalWayBillFee);
$("#spnTotalProcessingFee").html(json.TotalProcessingFee);
$("#spnTotalExpressFee").html(json.TotalExpressFee);
$("#spnTotalOperateFee").html(json.TotalOperateFee);
$("#spnSumWayBillProfit").html(json.SumWayBillProfit);
$("#spnSumTotalProfit").html(json.SumTotalProfit);
}
}
}
//控制指定定列的隐藏和显示(table,列索引数组,隐藏or显示:true,false)
function controlColumnShow(table, arr,tag) {
for (var i = 0; i < arr.length; i++) {
table.fnSetColumnVis(arr[i],tag);
}
}
var addDG;
var payOffMonth;
//添加到月结表 提单号,结算月份、包裹数、总成本、总收入、总毛利
function AddMonthlyBalance(id, date, ExpressCount, CostTotalFee, InComeTotalFee, GrossProfitRate) {
if (date == '') {
$.dialog.alert("提货单“"+id+"”数据未导入成本数据,且未清关");
return false;
}
var d = { isNeglect: false, data: [{"LoadBillNum": id, "ReconcileTime": date, "PreTotalCostFee": CostTotalFee,"TotalCostFee": CostTotalFee,"PreInComeFee": InComeTotalFee,
"InComeFee": InComeTotalFee,"TotalMargin": GrossProfitRate }] };
selectData = JSON.stringify(d);
addDG = $.dialog({
id: 'AddMonthPayList',
title: '添加到月结表',
width: 200,
height: 150,
content: "url:/Reconciliation/AddMonthPayOff?payOffDate="+date,
close: true,
btnBar: false,
max: false,
min: false,
lock: true
})
}
//批量添加到月结表
function AddMonthlyBalanceList(date) {
addDG = $.dialog({
id: 'AddMonthPay',
title: '添加到月结表',
width: 200,
height: 150,
content: "url:/Reconciliation/AddMonthPayOff?payOffDate=" + date,
close: true,
btnBar: false,
max: false,
min: false,
lock: true
})
}
//隐藏弹出框
function hidePublishWin(msg, result, isStay) {
var icon = "success.gif";
if (result == "False") {
icon = "error.gif";
}
$.dialog({
title: "提示",
icon: icon,
titleIcon: 'lhgcore.gif',
content: msg,
lock: true,
ok: true
});
if (result != "False") {
if (addDG) {
addDG.close();
}
if (isStay == 0) {
reloadList();
}
else {
reloadListNew();
}
}
}
//传递选择的行数据
function postSelectData(payOffMonth, isNeglect) {
//JSON.parse
//var json = JSON.stringify(selectData);
//var json = selectData;//JSON.parse(selectData);
selectData = selectData.substring(0, selectData.length - 1) + ",'payOffMonth':'" + payOffMonth + "','isNeglect':"+isNeglect+"}";
$.ajax({
url: '/Reconciliation/AddMonthPayOff',
type: 'POST',
dataType: 'json',
data: selectData,
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (isNeglect==false) {
addDG.close();
}
if (!data.IsSuccess && data.IsPoint) {
$.dialog.confirm(data.Message, function () { postSelectData(payOffMonth, true); });
}
else {
$.dialog.alert(data.Message);
}
}
});
}
</script>
<div class="areabx clear">
@using (Html.BeginForm("List", null, FormMethod.Get, new { @clase = "form-inline", @role = "form" }))
{
<div id="divSearch">
@*<div class="areabx_header">@ViewBag.Title</div>*@
<ul class="formod mgt10">
<li><span>客户名:</span>@Html.TextBox("CusName","",new { @class = "trade-time wid153" })</li>
<li><span>提单号:</span>@Html.TextBox("LoadBillNum","", new { @class = "trade-time" })</li>
</ul>
<ul class="formod mgt10">
<li><span style="width:120px;">清关完成时间:</span>@Html.TextBox("CompletionSTime", "", new { @class = "trade-time wid153", @onClick = "WdatePicker({maxDate:'#F{$dp.$D(\\'CompletionETime\\')}'})" })</li>
<li><span style="text-align:left;width:25px;margin-left:-20px;">—</span> @Html.TextBox("CompletionETime", "", new { @class = "trade-time wid153",
@onClick = "WdatePicker({minDate:'#F{$dp.$D(\\'CompletionSTime\\')}'})" })</li>
</ul>
<div class="botbtbx pdb0">
<input type="button" value="查询" id="btnSearch" onclick="reloadList();" class="btn btn-primary" />
<input type="button" id="btnAddMonthPayOffList" value="批量添加到月结表" class="btn btn-primary"/>
</div>
</div>
}
<div class="tob_box mgt15">
<table id="table_local" class="display" cellspacing="0" cellpadding="0" border="0" style="width: 100%;">
<thead>
<tr>
<th rowspan="2"><input type='checkbox' id='chkAllColl' onclick='selectAll()' />序号</th>
<th rowspan="2">客户简称</th>
<th rowspan="2">提单号</th>
<th rowspan="2">提单包裹重量(KG)</th>
<th rowspan="2">提单包裹数量</th>
<th rowspan="2">清关完成时间</th>
<th colspan="7"><span>成本</span><span class="divIncome1"><img id="imgIncome" src="/images/icon_9.png" alt="收起/展开" title="收起/展开"/></span></th>
<th colspan="7"><span>收入</span><span class="divIncome1"><img id="imgCost" src="/images/icon_9.png" alt="收起/展开" title="收起/展开"/></span></th>
<th colspan="2">毛利</th>
<th rowspan="2">对账单状态</th>
<th rowspan="2">操作</th>
</tr>
<tr>
<th>邮政地勤费</th>
<th>邮政仓租</th>
<th>邮政邮资</th>
<th>邮件处理费</th>
<th>邮政其他费用</th>
<th>邮政总成本</th>
<th>邮政结算状态</th>
<th>客户提货费</th>
<th>客户仓租</th>
<th>客户运费</th>
<th>客户操作费</th>
<th>其他费用</th>
<th>总收入</th>
<th>结算状态</th>
<th>总毛利</th>
<th>毛利率</th>
</tr>
</thead>
@*<tfoot>
<tr>
<td>总计</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td><span id="spnTotalWeight"></span></td>
<td><span id="spnTotalWayBillFee"></span></td>
<td><span id="spnTotalProcessingFee"></span></td>
<td></td>
<td></td>
<td></td>
<td><span id="spnTotalExpressFee"></span></td>
<td><span id="spnTotalOperateFee"></span></td>
<td></td>
<td></td>
<td></td>
<td><span id="spnSumWayBillProfit"></span></td>
<td><span id="spnSumTotalProfit"></span></td>
<td></td>
<td></td>
<td></td>
</tr>
</tfoot>*@
</table>
</div>
</div>

MonthPayOffModel模型类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Site.Models
{
public class MonthPayOffModel
{
/// <summary>
/// 对账时间
/// </summary>
public DateTime ReconcileTime { get; set; }
/// <summary>
/// 预计总成本
/// </summary>
public decimal PreTotalCostFee{get;set;}
/// <summary>
/// 真实总成本
/// </summary>
public decimal TotalCostFee{get;set;}
/// <summary>
/// 预计总收入
/// </summary>
public decimal PreInComeFee{get;set;}
/// <summary>
/// 真实总收入
/// </summary>
public decimal InComeFee { get; set; }
/// <summary>
/// 总毛利
/// </summary>
public decimal TotalMargin { get; set; }
/// <summary>
/// 提单号
/// </summary>
public string LoadBillNum { get; set; }
}
}

js控制全选反选

//监听每一行的复选框,控制全选、反选按钮
function controlSelectAll(i) {
var tblName, cbkAll; //Gridview ID ,全选框ID
var tblName = "table_local";
var cbkAll = "chkAllColl";
var id = "#cbx" + i;
//点击复选框选中行
//if ($(id)[0].checked == true) {
// $(id).parent().parent().addClass('selected');
// $(id).parent().parent().siblings().removeClass('selected');
//} else {
// $(id).parent().parent().siblings().removeClass('selected');
// $(id).parent().parent().removeClass('selected');
//}
var chks = getCheckbox(tblName);
var count = 0;
for (var i = 0; i < chks.length; i++) {
if (chks[i].checked == true) {
count++;
}
}
if (count < chks.length) {
document.getElementById(cbkAll).checked = false;
}
else {
document.getElementById(cbkAll).checked = true;
}
}
//全选反选
function selectAll() {
if ($("#chkAllColl").attr("checked")) {//如果全选的checkbox为选中状态时
$("#table_local input").attr("checked", "checked");//其他的checkbox全部勾选
//$("#table_local tbody tr").addClass('selected');
}
else {//如果全选的checkbox为选非中状态时
$("#table_local input").attr('checked', false);//其他的checkbox全部取消勾选
//$("#table_local tbody tr").removeClass('selected');
}
}

代码很多,不要被吓到了,其实也很简单,难点在在于如何构造json,然后让控制器自动接收并自动解析成List<Model>形式。这里用到了js的JSON.stringify(d)方法,注意json字符串里面的属性和值都加引号。

ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中的更多相关文章

  1. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  2. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

  3. ASP.NET MVC搭建项目后台UI框架—2、菜单特效

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  4. ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  5. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  6. ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  8. ASP.NET MVC搭建项目后台UI框架—7、统计报表

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

  9. ASP.NET MVC搭建项目后台UI框架—9、服务器端排序

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

随机推荐

  1. Zookeeper API for JAVA实战与应用

    package com.zookeeper.watcher; import java.util.List; import java.util.concurrent.CountDownLatch; im ...

  2. 再谈使用Emit把Datatable转换为对象集合(List<T>)

    一.前因和存在的问题 前面我写了一篇<使用Emit把Datatable转换为对象集合(List<T>)>的博文,其实起源于我自己编写的一个orm工具(见前面几篇博文有介绍),里 ...

  3. CocoaPods pod 安装、更新慢解决方法

    使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动了,令人甚是DT. 每一次都忘记现在自己记录一下 ...

  4. [译]AngularJS sercies - 获取后端数据

    原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...

  5. setValue:forUndefinedKey this class is not key value coding-compliant for the key

    下午开发过程中遇到一个错误,结果被的真惨,从上午 11 点查错一直查到下午 2 点才找到错误的原因,真的郁闷的不行. 关于查错这么久,主要的原因是:   1. 自己对 IOS 开发还不熟悉2. 不知道 ...

  6. 让低版本的 Android 项目显示出 Material 风格的点击效果

    每天都被不同的需求纠缠的生活是幸福而又不幸的,这不我们家亲爱的设计师们又让我们在低版本的 Android 平台上实现一下类似于 Material Design 的点击效果. 虽然大家都知道 Mater ...

  7. css 权重

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. java自定义类加载器

    前言 java反射,最常用的Class.forName()方法.做毕设的时候,接收到代码字符串,通过 JavaCompiler将代码字符串生成A.class文件(存放在classpath下,也就是ec ...

  9. 完全抽离WebAPi之特殊需求返回HTML、Css、JS、Image

    前言 今天我们来实现一个特殊的需求,这个需求说来也不过分,不过有点违背WebAPi的真实用途,WebAPi不过是作为传输数据而用,若非在项目开发中断不可想到还要实现一个页面来实时显示列表并进行后续其他 ...

  10. Vagrant使用

    常用命令 命令 说明 vagrant up 运行vm vagrant status 查看当前虚拟机运行状态 vagrant suspend 暂停虚拟机 vagrant ssh ssh方式登录虚拟机 v ...