zoukankan      html  css  js  c++  java
  • MVC的Model Binder总结

    今年一直在做一个mvc的项目,现在已经初具规模,适时的总结一下,也算是对MVC框架的一次更深入的研究。

    由于时间以及成员技术水平的原因,在开发过程中,一直秉持:完成功能为第一,然后再完善其他的准则。作为开发人员之一,很明白,其实有一些技术的应用都有待商榷。但是没办法,个人还是要服从集体利益的,这也就是体现的团队合作精神。还有一个原因,因为应用新技术,边学边用,内心始终是充满敬畏的。每次当找到了一个问题的解决方案后,就迫不及待应用之,没去加入更多的思考。有一些地方,明知道有更好的解决方式,或者说,有一些地方,已经偏离了MVC的定义范畴,但是依然在使用。

    首先是关于提交的问题。

    分为get和post两种方式。

    着重说一下在本项目中post所采用的的几种方式:

    一、JS提交

    1、先用controller中的Action初始化View(表单,cshtml)

    public ActionResult Index(){

            return View();

    }

    2、用JS进行验证,获取表单的值,然后调用后台方法(Controller中的方法)进行处理。

    二、Model Binder

    1、

    [AcceptVerbs(HttpVerbs.Get)]        

      public ViewResult RSVPForm()       

      {            

        return View();       

       }

    [AcceptVerbs(HttpVerbs.Post)]

       public ViewResult RSVPForm(GuestResponse guestResponse)        

       {            

        return View("Thanks", guestResponse);       

        }

    2、前一个方法初始化表单页面。第二个方法Post提交。

    3、参数只需要一个对象,如果是新增信息,ID不允许为空,但是数据确实没有ID值,就需要做如下处理:

    public ViewResult RSVPForm([Bind(Exclude="ID")]GuestResponse guestResponse)

    这样,在执行验证时, ModelState.IsValid才可以为true:

    4、这样有一个需要注意的,就是cshtml文件中,各个属性的名字必须一一对应。

    三、UpdateModel方式

    这个方式使用起来很简单,在Action中甚至不需要参数,直接:UpdateModel(islandV, this.Request.Form.AllKeys)即可,其中islanV是ViewModel模型。

    后两种方式,写起来很简单,不用再写一次页面值到ViewModel的转换过程,但是有些不便之处,就是当前台对应的“控件”传递过来的值和ViewModel的值不是一种类型的时候,就会发生值错误。

    比如前台的Dropdownlist绑定的Key和Value都是string类型,但是ViewModel中定义的是bool,就不能很好的正确转化。

    不断探索中,本篇文章也会一直保持更新.......

  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/xyang/p/2261418.html
Copyright © 2011-2022 走看看