繁体   English   中英

验证ASP.NET MVC框架中的已发布表单数据

[英]Validating posted form data in the ASP.NET MVC framework

我一直在玩ASP.NET MVC框架,让我感到困惑的一件事就是我打算如何对发布的表单数据进行服务器端验证。 我认为我不会回发到同一个网址,但如果不这样做,我如何使用输入的数据和错误消息重新显示表单? 此外,验证逻辑应该在哪里? 在模型或控制器? 这似乎是Web表单更强大的少数领域之一(我错过了验证控件)。

以下是MVC中流程的概述:

  1. / new - 渲染包含用户填写表单的“新”视图
    • 用户填写表单并将其发布到/ create
    • 帖子将路由到控制器上的“创建”操作
    • 在您的操作方法中,使用已发布的数据更新模型。
    • 您的模型应该验证自己。
    • 如果模型有效,您的控制器应该读取。
    • 如果模型有效,请将其保存到数据库。 重定向到/ show以呈现对象的show View。
    • 如果模型无效,请将表单值和错误消息保存在TempData中,然后再次重定向到“新建”操作。 使用TempData中的数据填写表单字段并显示错误消息。

验证框架将帮助您完成此过程。 此外,我认为ASP.NET MVC团队正在为下一个预览计划验证框架。

您可能想看一下ScottGu关于ASP.Net上一页的最新帖子。它将介绍一个非常有趣的验证示例:

http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

据我所知,每个人都在试图找出“标准”的做法。 那肯定是看看Phil Haack和Scott Guthrie关于MVC的最新帖子,你会发现一些关于他们如何做的有趣信息。 当我为自己玩它时,我为我生成的LinqToSql数据类创建了一个ModelBinder。 你可以查看这篇文章,了解如何组建一个基本的ModelBinder:

ASP.Net MVC Model Binder

在您的操作中,如果您创建了“Product”ModelBinder,您只需声明操作:

公共ActionResult新产品(产品产品)

并且模型绑定器将负责将发布的数据分配给对象属性,只要您无论如何都正确构建它。

在你的GetValue()方法中,你可以实现你想要的任何验证,无论是使用异常,正则表达式,还是你可以调用的任何东西,如:

(ModelStateDictionary_name).AddModelError(“form_element_id”,“entered_value”,“error_message”);

然后你可以在视图中抛出一个<%= Html.ValidationSummary()%>来显示你的所有错误。

对于客户端验证,我只使用了jQuery。 在获得基本样本设置之后,您可以开始做一些有趣的事情,将所有这些与部分视图和Ajax调用相结合。

你看过这个吗? http://www.codeplex.com/MvcValidatorToolkit

引自该页面

Validator Toolkit为新的ASP.NET MVC框架提供了一组验证器,以使用验证集在客户端和服务器端验证HTML表单。

我担心,比我更精通MVC的人不得不谈论你应该把建筑物放在哪里。

我只是学习MVC框架,所以我不确定它是多么偏离,但据我所知,你会在View.aspx这样的View上有一个表单。 然后,此表单将向控制器发送另一个操作方法,例如Update()传递您在Edit.aspx中设置的表单内容作为参数。

Update(int id, string name, string foo)

您可以在该方法中进行验证。 如果一切正常,

return View("Item", yourObject)

Castle项目中有Castle.Components.Validator模块。 它非常敏捷和强大。 它基于模型属性(或任何其他源)生成验证规则,甚至能够使用jQuery,Prototype Validation,fValidate等生成JS验证。 当然,在IValidationEngine接口后面抽象验证器是明智的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM