关于asp.net MVC 中的TryUpdateModel方法

时间:2022-03-26 18:35:48

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

在传统的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&period;NET MVC 中CSS JS压缩合并 功能的使用方法

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

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

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

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

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

  9. Asp&period;net mvc 中Action 方法的执行&lpar;二&rpar;

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

随机推荐

  1. hdu 1205 从整体考虑

    吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submiss ...

  2. IE8按F12不显示开发人员工具窗口

    转:http://www.cnblogs.com/micromouse/archive/2010/07/11/1775174.html 网上搜来的,记录一下,免得以后忘了 F12将开发人员工具启动后, ...

  3. SQL删除重复行和查询所有大于某成绩的语句分析

    有这样一个题,用一条SQL语句 查询出每门课都大于80分的学生姓名. 下面是表 分析,查询每门课程都大于80的学生.SELECT DISTINCT name FROM dbo.student WHER ...

  4. Scrapy Crawl 运行出错 AttributeError&colon; 'xxxSpider' object has no attribute '&lowbar;rules' 的问题解决

    按照官方的文档写的demo,只是多了个init函数,最终执行时提示没有_rules这个属性的错误日志如下: ...... File "C:\ProgramData\Anaconda3\lib ...

  5. webpack的版本进化史

    一.概述2015,webpack1支持CMD和AMD,同时拥有丰富的plugin和loader,webpack逐渐得到广泛应用. 2016.12,webpack2相对于webpack1最大的改进就是支 ...

  6. 5&period;Dubbo2&period;5&period;3泛化引用和泛化实现

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Ma ...

  7. VS2013密钥&lpar;所有版本&rpar;

    Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...

  8. Jmeter中控制某一段脚本失败后重复执行,并在每个HTTP Request名字中加上循环次数

    ================================================== 1.While Controller之前有一个BeanShell Sampler,用于Init N ...

  9. selenium&plus;python定位元素的方法及使用

    selenium的八种定位方法 By.ID 通过id定位 By.CLASS_NAME 通过className定位 By.CSS_SELECTOR 通过CSS定位 By.LINK_TEXT 通过link ...

  10. 生产环境JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...