zoukankan      html  css  js  c++  java
  • EF+MVC+Bootstrap 项目实践 Day12

    一、分页根据参数取数据

            public ActionResult Index()
            {
                var queryList = new CrmEntities().Customer;
                int pageIndex = Convert.ToInt16(Request["pageIndex"]);
                PagedList<Customer> customerPageList=queryList.OrderByDescending(x => x.ID).ToPagedList(pageIndex, 10);
                return View(customerPageList);
            }

    点击分页会传pageIndex=页数,1页暂就默认10条,可以根据前端传的参数进行设置。其它都封装好了,直接就可以用了

    二、搜索栏

    1、基本样式

    基本的样式出来了,其中下拉框的值要处理一下

                <div>
                    性别:@Html.DropDownList("Gender", "全部")&nbsp;&nbsp;
                    类型:@Html.DropDownList("Category", "全部")&nbsp;&nbsp;
                    职业:@Html.DropDownList("Profession", "全部")&nbsp;&nbsp;
                    年龄:@Html.DropDownList("AgeGroup", "全部")&nbsp;&nbsp;
                    <button type="submit" class="btn">搜索</button>
                </div>
            public ActionResult Index()
            {
                //分页
                var customerDbSet = new CrmEntities().Customer;
                int pageIndex = Convert.ToInt16(Request["pageIndex"]);
                PagedList<Customer> customerPageList = customerDbSet.OrderByDescending(x => x.ID).ToPagedList(pageIndex, 10);
                //下拉框
                Customer customer=new Customer();
                ViewData.Add("Gender", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumGender>(), "Key", "Value", customer.Gender));
                ViewData.Add("Category", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumCategory>(), "Key", "Value", customer.Category));
                ViewData.Add("Profession", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumProfession>(), "Key", "Value", customer.Profession));
                ViewData.Add("AgeGroup", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumAgeGroup>(), "Key", "Value", customer.AgeGroup));
    
                return View(customerPageList);
            }

    2、进行搜索

     

            public ActionResult Index(CustomerRequest request)
            {
                //分页
                TryUpdateModel(request.Customer);
                PagedList<Customer> customerPageList = CrmBll.GetCustomerList(request);
                //下拉框
                ViewData.Add("Gender", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumGender>(), "Key", "Value", request.Customer.Gender));
                ViewData.Add("Category", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumCategory>(), "Key", "Value", request.Customer.Category));
                ViewData.Add("Profession", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumProfession>(), "Key", "Value", request.Customer.Profession));
                ViewData.Add("AgeGroup", new SelectList(EnumHelper.GetItemValueList<CrmEnum.EnumAgeGroup>(), "Key", "Value", request.Customer.AgeGroup));
    
                return View(customerPageList);
            }
            public static PagedList<Customer> GetCustomerList(CustomerRequest request = null)
            {
                request = request ?? new CustomerRequest();
                using (var dbContext = new CrmEntities()){
                    IQueryable<Customer> queryList = dbContext.Customer;
    
                    if(request.Customer.UserId > 0)
                        queryList = queryList.Where(d => d.UserId == request.Customer.UserId);
    
                    if(!string.IsNullOrEmpty(request.Customer.Name))
                        queryList = queryList.Where(d => d.Name.Contains(request.Customer.Name));
    
                    if(!string.IsNullOrEmpty(request.Customer.Number))
                        queryList = queryList.Where(d => d.Number.Contains(request.Customer.Number));
    
                    if(!string.IsNullOrEmpty(request.Customer.Username))
                        queryList = queryList.Where(d => d.Username.Contains(request.Customer.Username));
    
                    if(!string.IsNullOrEmpty(request.Customer.Tel))
                        queryList = queryList.Where(d => d.Tel.Contains(request.Customer.Tel));
    
                    if(request.Customer.Gender > 0)
                        queryList = queryList.Where(d => d.Gender == request.Customer.Gender);
    
                    if(request.Customer.Category > 0)
                        queryList = queryList.Where(d => d.Category == request.Customer.Category);
    
                    if(request.Customer.Profession > 0)
                        queryList = queryList.Where(d => d.Profession == request.Customer.Profession);
    
                    if(request.Customer.AgeGroup > 0)
                        queryList = queryList.Where(d => d.AgeGroup == request.Customer.AgeGroup);
    
                    return queryList.OrderByDescending(u => u.ID).ToPagedList(request.PageIndex, request.PageSize);
                }
            }
        public class CustomerRequest : MvcPagerBase
        {
            public CustomerRequest()
            {
                Customer = new Customer();
            }
    
            public Customer Customer{get;set;}
        }

    三、提交表单

    源码使用了jquery.thickbox来弹出表单

    在控制器中使用了两个Create和Edit,重载了两个方法,一个是只传ID,相当于编辑,另一个是传FormCollection,相当于保存。

    ========================================

     看到插座有些歪,手贱去动一动,插座发出滋嗞响,电脑关机了。。。

    再开机,项目打不开了,csproj是空的,打开会是0000。。。还不能重建同名项目,只能先新建另一个,再把文件删掉,把文件夹改回来,把所有文件引用到项目里。

    但是生成的Ado.Net实体模型会变成如Account1之类的,而且生成也报错说有重名,引用不明确。把web.config删了实体模型的,再新建,发现EF引用又没了(因为是新建的项目),但NuGet又显示已安装

    要卸载还要先卸EF.extend和其它依赖项,才能卸EF,卸完再装,重新生成,终于不报错了

     ============================

    但是做的客户管理页面又空了。。。

    Git这次没指望上。一个是因为平时提交的少(因为就本机练习),另一个是不怎么会用,弄了半天没找到还原的方法。平时在项目中用小乌龟SVN和ankhsvn,非常顺手,Reverse之类的非常方便。这次尝鲜用了Git,感觉不怎么好用,界面也不友好。虽然代码界面貌似很强大,但不会用,也不是Linux环境,体现不出优势,反而增加学习难度。

    ===================================

    懒的去还原项目了,反正是练习,本来也是打算剩下10天左右补充基础知识准备面试的。也练了12天了,总结一下这次的心得吧:

    1、没事不要乱动电源。。。硬盘或主板也容易烧。。。不光要随时保存,还要经常提交,不熟悉的工具在项目中要少用,或至少是团队中有人会用的,不然一出问题就抓瞎。

    2、这份源码略复杂了些,功能是非常强大,封装很多公共类,又是继承又是接口,扩充一下可以支持很大的项目。但我这次是想学最基本的MVC+EF+Bootstrap,所以都不是直接复制源码来用,而是自已根据项目建文件夹、建类,把源码复制过来改,这样能弄清一些来龙去脉和继承关系。

    3、Bootstrap用了一些基本功能,就是要什么效果就去官网上找,然后复制下来改一改就有效果出来了。有时嵌套的比较多,可以适当去掉一些,只要页面能达到一定效果就可以。

    4、EF和Linq也算是入了门,一些基本的增删改查,把Entities弄出来打个点,看看有什么方法和参数。这次都是用查询操作符,表达式没用过,感觉表达式风格像SQL,还是操作符风格比较像C#。

    5、MVC有所收获,建文件夹、视图、控制器、实体、引用等,有个整体的了解。对Razor语法和参数也有了一定的认识。各环节传递参数、跳转,也有头绪了。

    6、分页、搜索练习了一下,大概会用了,表单虽然没练完,也算有所了解。

    7、学习了登陆页的认证、验证码,共享页的布局、引用

    8、虽然这次没用到Mysql,但是用EF的话,后端什么数据库都一样,下次可以练下Ado.Net原生写Mysql

    9、每天大概练习四五小时,有具体项目练习时,时间过的飞快,如果是看视频和电子书,很难全程注意力集中。很多知识点大概都知道,真要到项目中用起来,还是有很多坑,所以还是要多练。

    10、笔试面试不会涉及到太多项目细节,还是专注于基础知识的,剩下10天,就把基础知识补牢些吧。前端上次已经复习过了,现在主要是掌握C#和SqlServer(以及一些基本的MySql)

    ===========================

    源码在https://github.com/liuyouying/MVC,那个MVC文件夹就是。虽然最后一两个文件损坏,但该提交的应该都提交了,至少可以看出个大概,有兴趣的朋友可以拿去看看。可以对照着原始源码,原始的在第一篇有提到,这里就不再复述了

  • 相关阅读:
    关于博客
    lua中table复制
    logstash收集慢查询日志配置
    logstash的timestamp使用日志中的日期
    logstash收集bash_history历史命令
    使用supervisord监控logstash
    logstash 2.2以上版本,nginx 错误日志切割
    结合ELK进行分析PV,构建异步的WAF
    正则匹配嵌套结构
    一道关于停车计费的问题
  • 原文地址:https://www.cnblogs.com/liuyouying/p/5062384.html
Copyright © 2011-2022 走看看