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,就不能很好的正确转化。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏NetCore

复杂而艰辛的重构之路--起步

你有没有试过,当你踏入一个新的公司,看到了几千几万几十万代码的时候,那种崩溃的感觉? 代码多不可怕,怕的是代码的可读性、维护性、扩展性是如此之差,这时候该怎么办...

2069
来自专栏更流畅、简洁的软件开发方式

面向对象最重要的是“抽象”,三层最重要的也是“抽象”,没有抽象就不是真正的面向对象、三层。

  只用class的,那叫做“基于对象”,比如当初的vb6.0;只是分了三个项目,把以前写在一起的代码分成了三份,所谓的业务逻辑层就是一个传声筒,这一类自称三层...

2886
来自专栏木子昭的博客

Python3好用的原生api

对列表进行反序是一个很常见的操作, 但python反向切片的玩法实在是非常简洁, 让人无法拒绝, 其实对某一数据结构进行"反向"是一个很有意...

861
来自专栏不会写文章的程序员不是好厨师

日志那些事儿——谈谈需要日志输出的client jar应该如何设计

上篇文章提到了应该如何设计需要输出日志的client jar,大概有三个比较重要的点。

1293
来自专栏玩转全栈

flutter使用platform-channels制作插件

一、flutter使用platform-channels制作插件是否是一种完美的体验?

4304
来自专栏知晓程序

开发 | 技术高人如何开发小程序?他们用这套方法

1042
来自专栏Python中文社区

基于Redis的Bloomfilter去重

专栏作者简介 九茶 Python工程师,目前居于广州。Github知名开源爬虫QQSpider和SinaSpider作者,经常会在CSDN上分享一些爬虫、数据等...

9438
来自专栏牛客网

C++后台实习面经 - 腾讯WXG

拿到题目之后没有任何思考,想用中序遍历然后把遍历结果放到一个容量为k的队列中(基本操作)。但是为什么顺手就写下vector???面试官看见我这么快下笔之后看了看...

1604
来自专栏java一日一条

Java Fork/Join 框架

响应式编程(Reactive Programming / RP)作为一种范式在整个业界正在逐步受到认可和落地,是对过往系统的业务需求理解梳理之后对系统技术设计/...

2161
来自专栏云飞学编程

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫!

1944

扫码关注云+社区

领取腾讯云代金券