快速业务通道

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
,而且单调。

如果你引用了MVCToolkit程序集,你可以利用在System.Web.Mvc.BindingHelpers命名空间下实现的一个有用的扩展方法,来对此代码 作些清理。这个扩展方法叫做“UpdateFrom”,可以用在任何 .NET 对象上。它接受一个字典作为参数,然后,它会对任何匹配该 对象的公开属性的键,自动对本身进行属性赋值。

例如,我们可以重写我们上面的Create action方法,来使用UpdateFrom方法,象这 样:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

注:如果你因为安全的原因,想要更明确 些,只允许某些属性可以更新的话,你还可以向UpdateFrom方法传入一个可以更新的属性名称的字符串数组:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

实现编辑产品功能(第一部分 - 背景知识)

现在让我们 来实现网站“编辑产品”的功能。我们最终想要用户在访问/Products/Edit/[ProductID] URL时看到象下面这样的屏幕:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

跟上面的“添加新产品”表单提交 例子一样,我们将使用2个ProductsController Action方法来实现这个表单编辑交互,我们将称这2个方法为"Edit"和 "Update":

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

"Edit" 会显 示产品表单,"Update"会被用来处理表单的提交行动。

实现编辑产品功能(第二部分 - Edit Action)

我们将通过实现 ProductController的Edit action方法来开始启用我们应用的编辑功能。当我们在本贴子的开头创建产品列表网页的时候,我们是这么建造的 ,Edit action将接受一个作为URL一部分的id参数(譬如,/Products/Edit/5):

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

我们想要Edit Action方法从数据库中获取适当的产品对象 ,以及现有的产品供应商和分类集合(这样,我们可以在我们的编辑视图里实现这些东西对应的下拉框)。我们将使用下面的 ProductsEditViewData对象来定义一个强类型的视图对象来代表所有这些数据:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

然后,我们可以实现我们的Edit action方法来填充这个 viewdata对象,在"Edit" 视图中显示:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

实现编辑产品功能(第三部分 - Edit 视图)

我们可以使用下述方法来实现Edit.aspx视图网页:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

注意我们是如何同时使用上面例子中的Html.TextBox和 Html.Select辅助方法来的。这2个方法都是来自MVCToolkit.dll程序集中的扩展方法。

注意Html.Select辅助方法有个重载版本,允许 你指定下拉框中的选定值是什么。在下面的代码片断中,我表示我要Category下拉框根据编辑产品目前的CategoryID值自动选择某一项:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

最后,注意我们是如何使用Url.Action()辅助 方法来设置<form>元素的action属性的:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

Url.Action和Html.ActionLink这2个辅助方法都使用了ASP.NET MVC框架的路径选择引擎来生成URL(参阅第二部分以了解URL生成原 理的细节)。这意味着,如果我们改变我们网站的编辑功能的路径选择规则的话,我们不需要改动控制器或视图中的任何代码。例如,我们可 以将我们的URL做重新映射,换掉/Products/Edit/1,而是使用象/Products/1/Edit这样更具RESTful的URL的话,上面的控制器和视图代码不用 做改动,而依旧会工作。

实现编辑产品功能(第四部分 - Update Action)

最后一步是实现ProductController类上的 "Update" action方法:

ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景

跟前面的 "Create" action方法一样,我们将利用"UpdateFrom"扩展方法来从请求中自动填充我们的产品对象。但注意,填充的不 是一个空对象,我们使用了一个模式,先从数据库中获取老的值,然后对它应用用户做的改动,然后更新到数据库中。

编译完毕之后, 我们重新定向到产品列表网页,自动设置 /Products/Category/[CategoryID],以匹配我们正在操作的产品的保存的状态。

结语

希 望本帖子提供了在ASP.NET MVC框架中如何处理表单输入和提交场景的一些细节,还提供了你可以如何处理和结构化常见数据输入和编辑场景的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号