有比较才会有收货,有需求才会发现更多。

在传统的WebFormk开发工作中,我们常常会存在如下的代码块

        //保存
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
BLL.MoneyBll cun = new BLL.MoneyBll();
Model.Money m1 = new Model.Money();
m1.Commany = int.Parse(this.Commany.Text);
m1.CountryId = int.Parse(this.cou.Value);
m1.CountryIds = "";
m1.MaxX = float.Parse(this.MaxX.Text);
m1.MinX = float.Parse(this.MinX.Text);
if (!string.IsNullOrEmpty(this.XPrice.Text))
{
m1.XPrice = float.Parse(this.XPrice.Text);
}
if (!string.IsNullOrEmpty(this.YPrice.Text))
{
m1.YPrice = float.Parse(this.YPrice.Text);
}
m1.Type = int.Parse(this.Type.Text);
int res = cun.Add(m1);
//JscriptMsg("添加费用信息成功!", "moneyList.aspx", "Success", "parent.loadMenuTree");
}
catch
{
//JscriptMsg("添加费用信息失败,请检查录入合法性!", "moneyList.aspx", "Error", "parent.loadMenuTree");
}
}

即:在点击保存按钮的时候将表单Form内个表单元素的值一一获取,转换为相对应的目标类型,赋值到一个新的实体类对象属性上,用于实现相关的功能点开发。

以上的代码块在我们日常的开发工作中频频出现,相似程度可谓高之又高。

在mvc中为该情况的通用带来了优良的解决方案,——TryUpdateModel  用法如下

            FunModel model = new FunModel();
TryUpdateModel(model, formCollection.AllKeys);

其中

formCollection.AllKeys是可选参数,如果未传入该参数,TryUpdateModel会获取当前请求上下文中所有的key值,包括Request.QueryString(eg:a.aspx?a=1&b=2)中的key值,以及Request.Form中所有的key值,还包括整个请求上下文中所有的数据包键值对中的健,
然后循环这些所有的健,通过反射机制获取实体对象model对应key的属性,判断如果存在名称为key的属性,那么获取数据包键值对中改key对应的value值,通过的反射的形式赋值到实体类的对应属性中去,完成数据包内数据到实体对象的装配,在此过程之中同样存在数据包中的value值到实体对象属性Type的类型转换,省略了繁琐的int.Parse(this.Commany.Text)判断,转型操作,大大简化了功能开发中类似代码的出现。formCollection.AllKeys————————Request.Form中所有的key值。

关于asp.net MVC 中的TryUpdateModel方法的更多相关文章

  1. 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)

    在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...

  2. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  3. ASP.NET MVC中的模型装配 封装方法 非常好用

    下面说一下 我们知道在asp.net mvc中 视图可以绑定一个实体模型 然后我们三层架构中也有一个model模型 但是这两个很多时候却是不一样的对象来的 就拿微软的官方mvc例子来说明 微软的视图实 ...

  4. ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法

    ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法 近来正在分析淘宝中商品的信息,效果发生乱码,如: 原因便是中文字符格式发生冲突,ASP.NET MVC 默认采用utf-8,可是淘宝网页采用g ...

  5. Asp.net MVC 中超链接的三个方法及比较

    在Asp.net WebForm开发中,我们通过a标签进行跳转时,通常的写法是:<a href="index.aspx">首页</a>, 在Asp.net ...

  6. ASP.NET MVC 中CSS JS压缩合并 功能的使用方法

    通过压缩合并js文件和css文件,可以减少 服务器的响应 次数和 流量,可以大大减小服务器的压力,对网站优化有比较明显的帮助!压缩合并 css 文件和js文件是网站优化的一个 比较常用的方法. ASP ...

  7. asp.net MVC中使用Html.Checkbox提示该字符串未被识别为有效的布尔值错误的解决方法

    在asp.net MVC中使用Html.CheckBox提交后出现该字符串未被识别为有效的布尔值错误,或从类型“System.String”到类型“System.Boolean”的参数转换失败. 错误 ...

  8. ASP.NET MVC中对Model进行分步验证的解决方法

    原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...

  9. Asp.net mvc 中Action 方法的执行(二)

    [toc] 前面介绍了 Action 执行过程中的几个基本的组件,这里介绍 Action 方法的参数绑定. 数据来源 为 Action 方法提供参数绑定的原始数据来源于当前的 Http 请求,可能包含 ...

随机推荐

  1. eclipse下安装Extjs的插件spket

    最近项目要用ext进行开发,所以这段时间开始学习ext. 我这里用的是ext3.0,eclipse3.5. 每次都要去查API,很烦,所以装个EXT提示的插件对初学者来说有很大的帮助. 假设你已经下载 ...

  2. 在Assertion中获取Response的headers,获取headers中信息,获取body(content)

    // get the  headers of the requestdef content= messageExchange.getResponseContent()def headers = mes ...

  3. Android编程之仿微信显示更多文字的View

    微信朋友圈中,如果好友发表的文字过长,会自动收缩起来,底下有提示,当点击“显示更多”时才会展开. 首先定义布局文件(很简单,不解释): <?xml version="1.0" ...

  4. C++之vector中元素删除

    今天在删除vector中的元素中遇到一个问题,这里记录下来以便以后查阅. 预备知识:用到了erase()函数,对于一个容器c来说,假设迭代器为p,那么执行: c.erase(p)之后就删除了容器c中p ...

  5. 说说C#静态变量的诡异与恶心

    发现一段很诡异的C#代码,见识了静态构造函数这种奇怪的东西: using System; namespace StaticTest { class A { public static int X; s ...

  6. Socket编程学习之道:揭开Socket编程的面纱

    对TCP/IP.UDP.Socket编程这些词你不会非常陌生吧?随着网络技术的发展.这些词充斥着我们的耳朵. 那么我想问: 1.         什么是TCP/IP.UDP? 2.         S ...

  7. ssl/https双向验证的配置

    1.SSL认证 不需要特别配置,相关证书库生成看https认证中的相关部分 2.HTTPS认证 一.基本概念 1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源  2.双向认证,如果客户端 ...

  8. [MEAN Stack] First API -- 1. with Node.js, Express and MongoDB

    Learn how to import data into your MongoDB and then use Express to serve a simple Node.js API. Impor ...

  9. iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装

    UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...

  10. C# 自定义重绘TabControl

    using System.Drawing; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Runti ...