第一次MVC开发5天后的知识点记录

19 篇文章 0 订阅
11 篇文章 0 订阅

相关代码可到下载:http://download.csdn.net/detail/akuoma/9921193

MVC开发前基础知识需知道:

1、MVC的寻址是通过:/App_Start/RouteConfig.cs 文件来控制的(相比较于以前的站点相对路径,现在统一到Views目录下进行寻址)。

2、理解: url: "{controller}/{action}/{id}"    Controller即/Controllers文件夹里的那些继承了Controllers类的类文件;action 即这些类里面的返回类型为ActionResult的方法名。

3、Models:这个其实就是我们平时与表相对应的Model或Nhibernate里的Entity,就是实体;这个实体可以用你们自己平时用惯的实体就行,可以在其它类项目里,只需要在建View时选上对应的命名空间下的实体就行了。但要注意,要加一个构造方式传参进去给所有属性进行赋值。如:

  public DepartmentInfo(int _id, Guid _gid)
        {
            this.ID = _id;
            this.GID = _gid;
}


前面的基础知道了基本就能做MVC开发了,因为这个就是MVC的框架了,至于怎么与后台打交道,以前多层结构该怎么做还是怎么做就好;像在Action里的方法,除了返回需要是ActionResult外,如何从库里取到数据存放到Model 里按以前方式就行。

下面我记录一下开发过程中遇到的一些浅见及难点: 

1、做一个表的列表展示界面,最直接的就是在返回ActionResult的Index方法中,return View()中直接返回View(Model[]),就是实体数组。这个简单一看就会了,但是很多时候,列表展示的内容会需要多表关联查询,为了这个功能单独去做个新的Model实体,不值,且开发过程中改动再所难免,改动起来也麻烦。于是我怀念起以前的DataSet绑定了;于是我们想办法把DataSet传到View界面去呗。ViewData["名称"]= DataTable 或 ViewBag.名称 = DataTable 就解决问题了。例子如下:

Controllers关键代码:
            private WorkPostBLL bll = new WorkPostBLL();
        public ActionResult List(int pageIndex,int pageSize)
        {           
            DataSet ds = bll.GetListByPage2("", "", pageIndex, pageSize);//默认第一页,每页20 
            ViewBag.Count = int.Parse(ds.Tables[0].Rows[0][0].ToString());//总资料行数
            ViewBag.data = ds.Tables[1];//当前页资料列表
            return View(new WorkPostInfo());
        }

View页面前键代码:

@model HSOA.Model.HS.HR.WorkPostInfo
@using System.Data;注:Veiw要加上这个,不然识别不到DataTable
注:然后就是这里了。
 @if (ViewBag.data != null)
                {
                    foreach (DataRow item in (ViewBag.data as DataTable).Rows)
                    {
                        <tr>
                            <td>
                                @item["Name"].ToString()
                            </td>
                            <td>
                                @item["Num"].ToString()
                            </td>
                            <td>
                                @(item["IsMaster"].ToString() == "1" ? "是" : "否")
                            </td>
                            <td>
                                @item["fullname"]
                            </td>
                            <td>
                                @item["Updateuser"].ToString()
                            </td>
                            <td>
                                @(item["UpdateTime"].ToString() == "" ? "" : DateTime.Parse("1970-1-1").AddSeconds(double.Parse(item["UpdateTime"].ToString())).ToString("yyyy-MM-dd"))
                            </td>
                            <td>
                                @Html.ActionLink("Edit", "Edit", new { id = item["ID"] })
                            </td>
                        </tr>
                    }
                }

看到了吧,这个就是数据集的操作呀,在这里看就没有什么区别了吧。在这个列表界面,这样比用实例数组的要灵活很多。

2、MVC的无刷新操作:

      无刷新,我们当然第一时间想到的肯定是AJAX了,或者是JQuery;C#WebForm的是调用微软的ScriptManager可简单实现;或JQuery读到到JSON后用JScript手工加上。MVC也有自己的无刷新技术,就是ActionResult不是返回View(WorkPostInfo[]),而是返回 return PartialView("ListSearch", new WorkPostInfo());

     注:这里要多建一个View,但这个View是分部视图如下图:

关键代码如下:

分部视图Controler代码:

  public ActionResult ListSearch(FormCollection collection)
        {
            string strWhere="";
            DataSet ds = bll.GetListByPage2(strWhere, "", pageIndex, pageSize);//默认第一页,每页20 

            if (Request.IsAjaxRequest())
            {
                ViewBag.Count = int.Parse(ds.Tables[0].Rows[0][0].ToString());
                ViewBag.data = ds.Tables[1];

                return PartialView("ListSearch", new WorkPostInfo()); //直接返回数据视图层
            }
            return View(new WorkPostInfo());
        }

分部视图View代码就不列出了,就是具体的你要做地刷新的数据,与你要做无刷新的那个界面的相同即可。


无刷新界面的Controler与View都按列表的做就行,但在View界面要加上相应的Script如下:

<script type="text/javascript">
    //展示列表无刷新换页
    function ajaxList(pageIndex, pageSize) {
        var treeSelected = $("#hid_treeSelected").val();
        var searname = $("#sh_Name").val();
        var workpostid = $("#hid_WorkPostID").val();
        $.ajax({
            type: "POST",
            async: false,
            url: "/WorkPost/ListSearch",
            data: { "pageIndex": pageIndex, "pageSize": pageSize, "hid_treeSelected": treeSelected, "sh_Name": searname, "hid_WorkPostID": workpostid },
            success: function (data) {
                //DataList1:是一个DIV,用来框住展示列表的。
                $("#DataList1").html(data);
            }
        });
    }
</script>

注:一些弹出窗口及下拉弹窗层,也同样可以通过这个方法完成。)


3、对于@Html的各种控件的使用,因我本身就懂BootStrap等,所以用起来没有什么大问题。其中需注意一些的有@Html.DropDownListFor等可绑定数据的控件,其实也简单如:

 public ActionResult Create()
        {
            List<SelectListItem> lis = new List<SelectListItem> { new SelectListItem() { Value = "0", Text = "否" }, new SelectListItem() { Value = "1", Text = "是" } };
            
            ViewData["IsMaster"] = lis.ToArray();
            return View();
        }
这里就绑定了有是否两项的下拉列表,是否被选中,可以加 Selected=true,一使用就知道的了。


在这个样例中,我还用到了zTree这个树型控件,全免费的一个树型控件,适用性也强,推荐使用。

以前WebAPI做了不少,但用MVC做的这是第一个项目,到现在刚好第5天了,就做了这么些,后面遇到新的不同知识点再记录上来。

相关图片:

1、无刷新部门树及无刷新列表(暂没做分页):


2、无刷新弹出框:


3、部门表加上部门岗位表树:

4、下拉框


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值