ASP.NET MVC框架(第四部分) 处理表单编辑和提交场景
,而且单调。
如果你引用了MVCToolkit程序集,你可以利用在System.Web.Mvc.BindingHelpers命名空间下实现的一个有用的扩展方法,来对此代码 作些清理。这个扩展方法叫做“UpdateFrom”,可以用在任何 .NET 对象上。它接受一个字典作为参数,然后,它会对任何匹配该 对象的公开属性的键,自动对本身进行属性赋值。 例如,我们可以重写我们上面的Create action方法,来使用UpdateFrom方法,象这 样: 注:如果你因为安全的原因,想要更明确 些,只允许某些属性可以更新的话,你还可以向UpdateFrom方法传入一个可以更新的属性名称的字符串数组: 实现编辑产品功能(第一部分 - 背景知识) 现在让我们 来实现网站“编辑产品”的功能。我们最终想要用户在访问/Products/Edit/[ProductID] URL时看到象下面这样的屏幕: 跟上面的“添加新产品”表单提交 例子一样,我们将使用2个ProductsController Action方法来实现这个表单编辑交互,我们将称这2个方法为"Edit"和 "Update": "Edit" 会显 示产品表单,"Update"会被用来处理表单的提交行动。 实现编辑产品功能(第二部分 - Edit Action) 我们将通过实现 ProductController的Edit action方法来开始启用我们应用的编辑功能。当我们在本贴子的开头创建产品列表网页的时候,我们是这么建造的 ,Edit action将接受一个作为URL一部分的id参数(譬如,/Products/Edit/5): 我们想要Edit Action方法从数据库中获取适当的产品对象 ,以及现有的产品供应商和分类集合(这样,我们可以在我们的编辑视图里实现这些东西对应的下拉框)。我们将使用下面的 ProductsEditViewData对象来定义一个强类型的视图对象来代表所有这些数据: 然后,我们可以实现我们的Edit action方法来填充这个 viewdata对象,在"Edit" 视图中显示: 实现编辑产品功能(第三部分 - Edit 视图) 我们可以使用下述方法来实现Edit.aspx视图网页: 注意我们是如何同时使用上面例子中的Html.TextBox和 Html.Select辅助方法来的。这2个方法都是来自MVCToolkit.dll程序集中的扩展方法。 注意Html.Select辅助方法有个重载版本,允许 你指定下拉框中的选定值是什么。在下面的代码片断中,我表示我要Category下拉框根据编辑产品目前的CategoryID值自动选择某一项: 最后,注意我们是如何使用Url.Action()辅助 方法来设置<form>元素的action属性的: Url.Action和Html.ActionLink这2个辅助方法都使用了ASP.NET MVC框架的路径选择引擎来生成URL(参阅第二部分以了解URL生成原 理的细节)。这意味着,如果我们改变我们网站的编辑功能的路径选择规则的话,我们不需要改动控制器或视图中的任何代码。例如,我们可 以将我们的URL做重新映射,换掉/Products/Edit/1,而是使用象/Products/1/Edit这样更具RESTful的URL的话,上面的控制器和视图代码不用 做改动,而依旧会工作。 实现编辑产品功能(第四部分 - Update Action) 最后一步是实现ProductController类上的 "Update" action方法: 跟前面的 "Create" action方法一样,我们将利用"UpdateFrom"扩展方法来从请求中自动填充我们的产品对象。但注意,填充的不 是一个空对象,我们使用了一个模式,先从数据库中获取老的值,然后对它应用用户做的改动,然后更新到数据库中。 编译完毕之后, 我们重新定向到产品列表网页,自动设置 /Products/Category/[CategoryID],以匹配我们正在操作的产品的保存的状态。 结语 希 望本帖子提供了在ASP.NET MVC框架中如何处理表单输入和提交场景的一些细节,还提供了你可以如何处理和结构化常见数据输入和编辑场景的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |