ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互
目录
- ASP.NET MVC搭建项目后台UI框架—1、后台主框架
- ASP.NET MVC搭建项目后台UI框架—2、菜单特效
- ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
- ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持
- ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互
- ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)
- ASP.NET MVC搭建项目后台UI框架—7、统计报表
- ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
- ASP.NET MVC搭建项目后台UI框架—9、服务器端排序
- ASP.NET MVC搭建项目后天UI框架—10、导出excel(数据量大,非常耗时的,异步导出)
这一节,我将用一个Demo来演示在此UI框架中,控制器和视图的交互。以渠道管理为例。效果图如下:
按回车执行查询,不是F5,笔误。



这里我使用了基于jquery的模态窗体组件lhgdialog和表格组件dataTables。dataTables更多资料请参考:http://dt.thxopen.com/example/
lhgdialog更多资料请参考:http://www.lhgdialog.com/api/
Action
1、在我们的MVC项目中的Models文件夹中,添加一个model类ChannelInfo.cs,因为项目中的ORM框架使用的是Nhibernate,所以属性前面加了virtual
public class ChannelInfo
{
public virtual int ID { get; set; } public virtual string ChannelStyle { get; set; } public virtual string ChannelCode { get; set; }
public virtual string CnName { get; set; }
public virtual string EnName { get; set; } public virtual string Status { get; set; }
}
2、添加控制器ChannelController,这里为了演示,我使用的假数据
public class ChannelController : Controller
{
//
// GET: /Channel/ public ActionResult Index()
{
return View();
}
//添加渠道
public ActionResult AddChannel()
{
return View();
} [HttpPost]
public JsonResult List(ChannelInfo filter)
{
List<ChannelInfo> list = new List<ChannelInfo>();
for (int i = ; i < ; i++)
{
list.Add(new ChannelInfo
{
ID = ,
ChannelCode = "E_Express"+i,
ChannelStyle = "香港E特快"+i,
CnName = "香港E特快"+i,
EnName = "HK E-Express"+i,
Status = ""
});
}
if (!string.IsNullOrEmpty(filter.ChannelCode))
{
list = list.Where(x => x.ChannelCode == filter.ChannelCode.Trim()).ToList();
}
if (!string.IsNullOrEmpty(filter.CnName))
{
list = list.Where(x => x.CnName == filter.CnName.Trim()).ToList();
}
if (!string.IsNullOrEmpty(filter.EnName))
{
list = list.Where(x => x.EnName == filter.EnName.Trim()).ToList();
} //构造成Json的格式传递 iTotalRecords :总记录数 iTotalDisplayRecords :每页显示的记录数
var result = new { iTotalRecords = , iTotalDisplayRecords = , data = list };
return Json(result, JsonRequestBehavior.AllowGet);
}
}
3、修改_Layout.cshtml,因为后面的View会用到
<!DOCTYPE html>
<html lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<title>财务管理 @ViewBag.Title</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
@* @Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")*@
<link href="~/Content/sharestyle.css" rel="stylesheet" />
<link href="~/Content/main.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.8.3.min.js"></script>
<script src="~/Lib/lhgdialog/lhgdialog.min.js?self=true&skin=iblue"></script>
</head>
<body>
@* @RenderSection("featured", required: false)*@
<section class="content-wrapper main-content clear-fix">
@RenderBody()
</section>
@*<footer>
<div class="copyright"> © </div>
<div class="content-wrapper">
<div class="float-left">
<p>© @DateTime.Now.Year - 我的 ASP.NET MVC 应用程序</p>
</div>
</div>
</footer>*@
@* @Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)*@
</body>
</html>
4、添加渠道管理的视图Index,代码很简单,我都添加了详细的注释,相信大家都看得懂。这里主要只添加了列表展示,和查询过滤,分页排序。datables是支持服务器端分页排序的,但是我这里只写了客户端排序,就是先一次性把所有的数据查出来,然后再进行分页排序。在数据量小的情况下,体验还是非常不错的,也简单。如果数据量大,就要启用服务器分页,即每次按需取数据,关于datables服务器分页网上.NET的例子非常少,不过经过摸索,我已经实现了,只是此系列没有写出来。同时datables是支持缓存的,具体使用大家可以参考我上面发的网址,我这里只做个简单的引荐。 这里不好意思忘了测试兼容性问题,后面提供的源代码中Index视图这里兼容性有问题,对话框样式冲突了,在源码中请将
tbody{ height:50px;} 修改为 #table_local tbody{ height:50px;}
@{
ViewBag.Title = "Index";
}
<style type="text/css">
html, body
{
overflow:hidden;
}
#table_local tbody
{
height:50px;
}
table
{
overflow-y:auto;
overflow-x:hidden;
}
</style>
<link href="~/Lib/DataTables-1.10.6/media/css/jquery.dataTablesNew.css" rel="stylesheet" />
<script src="~/Lib/DataTables-1.10.6/media/js/jquery.dataTables.min.js"></script>
<script src="~/Content/DataTablesExt.js"></script>
<script type="text/javascript">
//查询 刷新
function reloadList() {
var tables = $('#table_local').dataTable().api();//获取DataTables的Api,详见 http://www.datatables.net/reference/api/
tables.ajax.reload();
}
function deleteRecord(id) {
$.dialog.confirm("确定要删除吗?", function () { $.dialog.alert("删除成功!"); }, null)
}
function successFun() {
$.dialog.alert("渠道添加成功!");
}
//弹出框
var dg;
function showPublishWin() {
dg = new $.dialog({
id: "AddChannel",
title: "添加渠道",
content: "url:/Channel/AddChannel",
width: 424,
height: 320,
max: false,
min: false,
lock: true,
close: true,
cancel: true, //X按钮是否显示,如果设置了回调函数,一定会显示
//cancel: controlAllBtn,
ok: successFun //点击确定执行的回调函数
});
dg.show();
}
document.onkeydown = function (event) {
var e = event || window.event || arguments.callee.caller.arguments[0];
if (e && e.keyCode == 27) { // 按 Esc
//要做的事情
}
if (e && e.keyCode == 13) { // enter 键
//要做的事情
reloadList();
}
};
</script>
<script type="text/javascript">
$(function () {
var h = $(document).height() - 258;
$("#table_local").dataTable({
//"iDisplayLength": 10,//每页显示10条数据
//这里也可以设置分页,但是不能设置具体内容,只能是一维或二维数组的方式,所以推荐下面language里面的写法。
//"aLengthMenu": [[10, 15, 20, 25, 50, -1], [10, 15, 20, 25, 50, "All"]],
bProcessing: true,
//"dom": 'i,p',//l - Length changing 选择每页显示行数下拉框的控件 f - Filtering input 搜索过滤控件t - The Tabletools 导出excel,csv的按钮
//i - Information 显示汇总信息(从 1 到 100 /共 1,288 条数据) p - Pagination 分页控件 r - pRocessing 显示加载时的进度条 C - copy 显示复制,excel的控件
//ajax: "/SendGoods/List",
"scrollY": h, //垂直滚动
"scrollCollapse": "true", //开启滚动
"dom": 'tr<"bottom"lip><"clear">', //这个是控制布局的,不是很好理解
"bServerSide": false, //指定从服务器端获取数据
sServerMethod: "POST", //请求方式
sAjaxSource: "@Url.Action("List", "Channel")", //数据源
"fnServerParams": function (aoData) { //查询条件
aoData.push(
{ "name": "ChannelCode", "value": $("#ChannelCode").val() },
{ "name": "CnName", "value": $("#CnName").val() },
{ "name": "EnName", "value": $("#EnName").val() }
);
},
columns: [
{
title: "1",
"visible": false,
"data": "ID", "sClass": "center", //样式
orderable: false, //该列不排序
"render": function (data, type, row) { //列渲染
return "<label class='position-relative'><input id='cbx" + data + "' type='checkbox' onclick='controlSelectAll(" + data + ")' class='cbx' value='" + data + "'/>";
}
},
{ "data": "ChannelCode", title: "渠道代码" },
{ "data": "ChannelStyle", title: "渠道类别" },
{ "data": "CnName", title: "中文名" },
{ "data": "EnName", title: "英文名" },
{
"data": "Status", title: "是否启用", orderable: false, "render": function (data, type, row, meta) { //自定义列
if (data == "1") {
return "是";
}
else {
return "否";
}
}
}
, {
"data": "ID", orderable: false, title: "操作", "render": function (data, type, row, meta) { //自定义列
return "<a style='visibility:visible' onclick='deleteRecord(" + data + ")'>删除</a>";
}
}
],
paging: true,//分页
ordering: true,//是否启用排序
searching: false,//搜索
language: {
lengthMenu: '每页显示:<select class="form-control input-xsmall">' + '<option value="5">5</option>' + '<option value="10">10</option>' + '<option value="15">15</option>'
+ '<option value="20">20</option>' + '<option value="25">25</option>' + '<option value="30">30</option>' + '<option value="35">35</option>' + '<option value="40">40</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"//分页样式的类型
});
// $("#table_local_filter input[type=search]").css({ width: "auto" });//右上角的默认搜索文本框,不写这个就超出去了。
});
</script>
<div class="areabx clear" style="margin-bottom:0px;padding-bottom:0px;">
@using (Html.BeginForm("List", null, FormMethod.Get, new { @clase = "form-inline", @role = "form" }))
{
<div class="areabx_header">渠道管理</div>
<ul class="formod mgt10">
<li><span>渠道代码:</span>@Html.TextBox("ChannelCode","", new {@class="trade-time wid153" })</li>
<li><span>渠道中文名:</span>@Html.TextBox("CnName", "",new {@class="trade-time" })</li>
<li><span>渠道英文名:</span>@Html.TextBox("EnName", "",new {@class="trade-time" })</li>
</ul>
<div class="botbtbx pdb0">
<input type="button" value="添加渠道" class="btn btn-primary" onclick="showPublishWin()"/>
<input type="button" value="查询" onclick="reloadList();" class="btn btn-primary">
</div>
}
<div class="tob_box mgt15">
<table id="table_local" class="display" cellspacing="0" cellpadding="0" border="0" style="width:100%">
</table>
</div>
</div>
5、添加视图AddChannel,这里没写完。本来还打算把修改也添加进去的,有兴趣的朋友可以自己去完成
@{
ViewBag.Title = "添加渠道";
}
<style type="text/css">
body {
overflow:hidden;
}
</style>
<h2>添加渠道</h2>
<div>开发中...</div>
由于要保持和美工给的样式风格一直,我修改了dataTables的样式源码
6、按F5运行
框架中用到的js和css、Img:CssJsImg源码
系列本来没写完,不打算写了,我就先把这个半成品的源码贴出来吧,免得小编又说我没有足够的知识分享了,虽然是半成品,但是基本的框框都有了。
插曲:本篇文章之前都没法在博客园首页显示的,小编给的回复是:没有足够的知识分享。我心拔凉拔凉的。虽然字码得不多,但是代码中倾注了我的思想和经验、时间和心血。精简、通俗、易懂一直是我追求的。
开发环境:VS2012
有朋友评论说源码里少了dll,那两个dll都是没用到的,我现在已经将没用的dll引用删除,所以源码下载地址更新了,给大家带来的不便请谅解!
半成品UI框架源码下载:http://pan.baidu.com/s/1c055sw4
如果源码对大家很有帮助,希望大家给个推荐,当是支持下我无偿的技术分享,如果有更好的建议或不同的意见,可以提出来,大家一起探讨。谢谢!
ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互的更多相关文章
- ASP.NET MVC搭建项目后台UI框架—1、后台主框架
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...
- ASP.NET MVC搭建项目后台UI框架—2、菜单特效
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—7、统计报表
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...
- ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—9、服务器端排序
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...
随机推荐
- java 反编译利器JD-JUI
下载地址: http://download.csdn.net/download/suixingbugai/4145221
- 移动开发--Hybrid和Native混合开发-->HybridApp 、NativeApp、WebApp
1.1. APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等).金融(各手机行业.P2P借贷等).医疗(智慧医疗).交通(滴滴.Uber等).教育(慕课网 ...
- jQuery第二篇 (帅哥)
1.1 jQuery操作DOM jQuery课程的目标:学会使用jQuery设计常见效果 选择器 基本选择器:#id ..class .element.* . 层级选择器: 空格.>.+.~ 基 ...
- Security5:Execute AS 和 impersonate 权限
principal 是统称,包括login,user,role等,可以向作为安全主体的用户授予权限,principal分为server level和database level. 登录名是Server ...
- Constraint2:constraint
一,Constraint 是表定义的一部分,用于实现数据完整性. Data Integrity 由三种类型的constraint实现: Entity Integrity:数据是唯一的.约束: prim ...
- SQL Server 默认跟踪(Default Trace)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 查看默认跟踪信息(Default Tr ...
- iOS开发之各种动画各种页面切面效果
因工作原因,有段时间没发表博客了,今天就发表篇博客给大家带来一些干货,切勿错过哦.今天所介绍的主题是关于动画的,在之前的博客中也有用到动画的地方,今天就好好的总结一下iOS开发中常用的动画.说道动画其 ...
- Ubuntu杂记——Ubuntu下Eclipse搭建Maven、SVN环境
正在实习的公司项目是使用Maven+SVN管理的,所以转到Ubuntu下也要靠自己搭环境,自己动手,丰衣足食.步骤有点简略,但还是能理解的. 一.安装JDK7 打开终端(Ctrl+Alt+T),输入 ...
- 高级javascript---变量作用域
变量作用域 (JavaScript) JavaScript 有两个范围:全局和局部. 在函数定义之外声明的变量是全局变量,它的值可在整个程序中访问和修改. 在函数定义内声明的变量是局部变量. 每当执行 ...
- C++运算符重载
C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...