ASP.NET MVC搭建项目后台UI框架—五 、德姆o演示Controller和View的并行必发365乐趣网投手机版

by admin on 2019年3月28日

“到新兴,作者的眼光逐步从镜子,转向了开阔的社会风气。不要倦了作者挣扎,不要忘了自个儿洗涤。一切都在流动,各个人都得以变得更好。”

目录

  1. ASP.NET
    MVC搭建项目后台UI框架—一 、后台主框架
  2. ASP.NET
    MVC搭建项目后台UI框架—② 、菜单特效
  3. ASP.NET
    MVC搭建项目后台UI框架—③ 、面板折叠和展开
  4. ASP.NET
    MVC搭建项目后台UI框架—四 、tab多页签援助
  5. ASP.NET
    MVC搭建项目后台UI框架—⑤ 、德姆o演示Controller和View的竞相
  6. ASP.NET
    MVC搭建项目后台UI框架—六 、客户保管(添加、修改、查询、分页)
  7. ASP.NET
    MVC搭建项目后台UI框架—柒 、计算报表
  8. ASP.NET
    MVC搭建项目后台UI框架—八 、将View中挑选的数目行中的局地数据传入到Controller中
  9. ASP.NET
    MVC搭建项目后台UI框架—九 、服务器端排序
  10. ASP.NET
    MVC搭建项目后天UI框架—⑩ 、导出excel(数据量大,相当耗费时间的,异步导出)

这一节,作者将用3个德姆o来演示在此UI框架中,控制器和视图的并行。以渠道管理为例。效果图如下:

按回车执行查询,不是F5,笔误。

必发365乐趣网投手机版 1必发365乐趣网投手机版 2必发365乐趣网投手机版 3

此处自个儿利用了依据jquery的模态窗体组件lhgdialog和表格组件dataTables。dataTables越多质感请参见:http://dt.thxopen.com/example/

lhgdialog更多材质请参考:http://www.lhgdialog.com/api/

“从晚上起来,天空就从糟糕心思,阴云密布,透出阵阵凉意,但幸好下午事先还没有降水的惊险。”

Action

一 、在我们的MVC项目中的Models文件夹中,添加多少个model类ChannelInfo.cs,因为品种中的OMuranoM框架使用的是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; }
    }

② 、添加控制器ChannelController,那里为了演示,笔者利用的假数据

必发365乐趣网投手机版 4必发365乐趣网投手机版 5

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 = 0; i < 1100; i++)
            {
                list.Add(new ChannelInfo
            {
                ID = 1,
                ChannelCode = "E_Express"+i,
                ChannelStyle = "香港E特快"+i,
                CnName = "香港E特快"+i,
                EnName = "HK E-Express"+i,
                Status = "1"
            });
            }
            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 = 1100, iTotalDisplayRecords = 10, data = list };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }

View Code

3、修改_Layout.cshtml,因为前边的View会用到

必发365乐趣网投手机版 6必发365乐趣网投手机版 7

<!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"> ©2015 </div>
           <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 应用程序</p>
                </div>
            </div>
        </footer>*@
@*        @Scripts.Render("~/bundles/jquery")
        @RenderSection("scripts", required: false)*@
    </body>
</html>

View Code

四 、添加水道管理的视图Index,代码非常粗略,作者都添加了详实的笺注,相信大家都看得懂。那里最首要只添加了列表显示,和查询过滤,分页排序。datables是永葆服务器端分页排序的,可是笔者那里只写了客户端排序,正是先二回性把全数的数据查出来,然后再拓展分页排序。在数据量小的景况下,体验依旧那三个不利的,也简单。假诺数据量大,就要启用服务器分页,即每一回按需取数据,关于datables服务器分页网上.NET的例证格外少,然而通过查找,我曾经完结了,只是此连串没有写出来。同时datables是永葆缓存的,具体运用我们能够参见笔者上边发的网址,我那边只做个简易的推荐。
那里倒霉意思忘了测试包容性难题,后边提供的源代码中Index视图那里包容性有失水准,对话框样式冲突了,在源码中请将

tbody{ height:50px;}   修改为 #table_local tbody{ height:50px;}

必发365乐趣网投手机版 8必发365乐趣网投手机版 9

@{
    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: '搜索:',//右上角的搜索文本,可以写html标签

                paginate: {//分页的样式内容。
                    previous: "上一页",
                    next: "下一页",
                    first: "",
                    last: ""
                },

                zeroRecords: "暂无记录",//table tbody内容为空时,tbody的内容。
                //下面三者构成了总体的左下角的内容。
                info: "总共 (_PAGES_) 页,显示 _START_ -- _END_ ,共 (_TOTAL_) 条",//左下角的信息显示,大写的词为关键字。初始_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>渠道代码:@Html.TextBox("ChannelCode","", new {@class="trade-time wid153" })</li>
                <li>渠道中文名:@Html.TextBox("CnName", "",new {@class="trade-time" })</li>
                <li>渠道英文名:@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>

View Code

⑤ 、添加视图AddChannel,那里没写完。本来还打算把修改也助长进去的,有趣味的情侣能够自身去做到

@{
    ViewBag.Title = "添加渠道";
}
<style type="text/css">
    body {
        overflow:hidden;
    }
</style>
<h2>添加渠道</h2>
<div>开发中...</div>

出于要保全和画画给的样式风格一贯,小编修改了dataTables的体制源码

6、按F5运行

框架中用到的js和css、Img:CssJsImg源码

比比皆是本来没写完,不打算写了,小编就先把这一个半成品的源码贴出来吧,免得我又说自家尚未丰硕的知识分享了,纵然是半成品,不过基本的层面都有了。

插曲:本篇小说在此之前都无法在新浪首页展现的,作者给的回复是:没有充裕的知识分享。作者心拔凉拔凉的。即便字码得不多,可是代码中倾注了自家的研讨和阅历、时间和心血。精简、通俗、易懂一贯是作者追求的。

付出环境:VS二零一三

有朋友评论说源码里少了dll,那多个dll都以没用到的,小编今日早就将没用的dll引用删除,所以源码下载地址更新了,给我们带来的艰辛请见谅!

半成品UI框架源码下载:http://pan.baidu.com/s/1c055sw4

若是源码对我们很有帮衬,希望大家给个推荐,当是帮衬下本身白白的技能分享,要是有更好的建议或不相同的理念,能够建议来,我们一起研讨。谢谢!

“见鬼,那您觉得我们那样来来回回的到底走到如何时候?”

在五十三年7个月零十一天以来的日日夜夜,弗Loren蒂诺.Ali萨一贯都准备好了答案。——“一生一世”。

必发365乐趣网投手机版 10

说起来,想看那本书真的是有相当短一段时间了,不仅种种推荐书单上必备它的身影,而且朋友圈也能够旁观有关它的“面容”。也曾为一睹美丽的颜值而抚摸遍教室书架上大多数它的“伙伴们”,苦于寻找,却被各个不巧合地借阅记录战胜。终于,时间如仲春一到便换上绿衣服,秋日即来便披上金装的银杏树,好似变脸般,说来就来,说去就去。

日趋地,便不再刻意寻找,一切都自有布置。就在1个秋高气爽,阳光明媚正好地照进窗前的上午,背着书包,戴着动铁耳机,闲逛于各方文人墨客雅士骚客们曾有或曾经表达出来即成书的社会风气里,不曾想,小编依然瞥见了有趣的事已久的它,有弹指间,曾怀疑本身的青光眼。

仅从自身个人浅鄙的教室阅读经验,得出去3个定论:该找到的,该遇见的,基本上都会逢着,寻不着的,也无须着急,不管先后顺序,总归是有个序在的。


随笔伊始于乌尔比诺先生,他前来检查挚友赫雷(英文名:hè léi)米亚.德圣阿Moll的遗体。阿赫雷先生米亚.德圣阿莫尔在57岁的时候自杀,为的是不再变老。回到自个儿的家庭,医务卫生人士发现本身心爱的宠物鹦鹉正停在一株芒果树的顶上,当她盘算抓住它的时候,迎向了友好的凋谢。

弗Loren蒂诺·Ali萨选拔了那个时候向乌尔比诺的爱妻费尔明娜·达萨求亲了心灵,不过她被他的冒犯,以及本身所感到的内心深处触发出的激情所吓退。当他们都年轻的时候,她和弗Loren蒂诺相互交流了比比皆是火热的情书,并且已经控制结婚。

而重复看到她时,费尔明娜却“惊慌地自问,怎么会这么阴毒地让那样一个幻影在友好的心间占据了那么长日子”,并对她说“忘了啊”。弗Loren蒂诺则珍守着对他的热望,并且决定为她保持童贞直到他们最后能够走到共同。可是她火速发现本人用放纵的生存来排除和消除分离的架空,费尔明娜嫁给了乌尔比诺先生,成为了他忠诚的配偶。而医务卫生职员本身也拥有相似但正如简略的一段前事。

唯有在乌尔比诺死后弗洛伦蒂诺才重新检核对费尔明娜的爱恋,他稳步地通过祥和的文字消弭了多人里面包车型客车隔阂。在贰回船上的远足中,年迈的一对发现本身重坠爱河。费尔米娜担心那桩情事或者引起的丑事,于是船长升起了一面向代表霍乱流行的黄旗,护送着那3人小编放逐但千古不分离的痴情。

五二十个年禧,跨越十九,二十两个百年,只因送电报时弗Loren蒂诺.Ali萨的偶发一瞥,那些正在教姑妈读书的费尔明娜,从此便住进了她的内心,成为本场半世纪后仍未截至的顶天立地的爱情的源流。

那就好像我们那儿唱过的歌一样,“一眼万年”?!从当时的爱情观来看,弗Loren蒂诺.Ali萨无非是被发了累累次好人卡的“老好人”只怕备胎而已,超越六分之三人都不会选取信任有那般的柔情存在,当然笔者也不依赖。

小编这么写,表明他是抱着对那种爱情的想望与敬佩的千姿百态,相信并心仪着。


本来一切故事是关于霍乱年代的情爱,更是立马各样生活情形的叙述,让大家能够接着遗闻的点子,思考人生,思考难题。比如为了不再老去,为了不被贴上老人的竹签,为了在爱的人眼前突显出最棒的气概,赫雷(Ma Jun)米亚.德圣阿Moll道完:“笔者永远也不会变老”之后便自杀了。

乘势年华的蹉跎,年龄的滋长,大家不得不去思考那样的题材,各个人都有选取的和谐怎么走,最后走向何方的权利,并且不供给任何冠冕堂皇的理由。那就是他的抉择,选取没有好坏,唯有自个儿才明白做选取的困顿而已。

哪怕弗Loren蒂诺.阿里萨一女不嫁二男地爱着他的“花冠女神”,可是从文字中,大家能够看出,当他和他互通信件,甚至于信中私定一生时;当她要嫁给乌尔比诺先生时;当他看看他和医务职员婚姻生活的一些暗中的传说时;到结尾医务卫生职员死去,而他毕竟有机会重拾那份爱时;他的想法,慰藉自个儿的点子都有了有的变通,他不再写狂热粘腻如糖的情诗那般的文字,而是于过去被取怎么也写不佳的生意信件的格局引领费尔明娜精通他的爱,不再排斥他,甚至于早先接受和赏鉴他。也作证了那半个世纪以来,他的爱情观的持续整治,不断地转移,表达怎样事情都不是照猫画虎的,即使他转移不了她嫁给了医务卫生职员的实际情况,但也不要紧碍他最后促成了服从了半个世纪的痴情。

那是或不是足以说:“世上无难事,或者有心人。”世上无没有挖不动的墙角,只要肯挥锄头?!哈哈~

而说到女主,她处于3个啼笑皆非的家庭里,靠做不正当职业暴发致富的老爹,希望他能够嫁三个有身份有身份的郎君,从而摆脱当时社会阶层分明情况下团结家不入流的难堪景况。于是他的爱意,当然得不到阿爸的协助,而在当下的他,过于自大,过于盲目,同时无法也不能有投机的主心骨。对于今天的大家来说,一对情人,仅通过信件来往,而且信中都是各个狂热痴迷不悟的情诗,俩人大致从不机会好好见一晤面,聊一聊人生,那都以不可捉摸的。那不正是我们所说所放任的“网恋”吗?而且相信肯定会合光死那种。同理可得,方今的大家简直不用太甜蜜了吧。以往对女性的监管,对他们爱的权柄的剥夺是何等都惨酷与冷漠。

在那样好的“美貌新世界”里,没有霍乱,没有社会阶层的软禁,没有对女性的相对性歧视,大家就该笑容可掬并快活地过日子,管她有没有爱情,自身一个人也得以罗曼蒂克又欢娱!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图