2008-08-13 48 views
10

我一直在ASP.NET MVC框架和一两件事,真的困惑我玩弄我是怎样,我的意思办提交的表单数据的服务器端验证。我认为我不会回发到相同的URL,但如果我不这样做,我如何重新显示输入的数据和错误消息的表单?另外,验证逻辑应该放在哪里?在模型或控制器中?这似乎是Web表单更强大的几个领域之一(我错过了验证控件)。验证提交的表单数据在ASP.NET MVC框架

回答

2

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

从页面

的验证工具包提供报价使用 验证集客户端和服务器端的新ASP.NET MVC框架 上验证 HTML表单验证的一套 。

恐怕有人比我更懂MVC精明的人会不得不在建筑物的哪个位置说些什么。

+0

我确实看了一下CodePlex项目,但我并没有对我所看到的(当时)印象深刻。也许现在好多了。我会再看一次。显然,Jeff和团队必须验证StackOverflow中的表单数据。当我查看[问一个问题](http://stackoverflow.com/questions/ask)页面的HTML时,它看起来像页面发回自己。我想知道他们是如何实施验证的。 – 2008-08-13 20:15:38

0

我刚学的MVC框架太,所以我不知道如何关闭这个,但是从我的理解,你会对一个视图,如Edit.aspx形式。然后,此表单会将控件传递给另一个操作方法,如Update()将您在Edit.aspx中设置的表单的内容作为参数传递。

Update(int id, string name, string foo) 

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

return View("Item", yourObject) 
12

下面是MVC流的概述:

  1. /新 - 渲染包含表格的“新”观点,为用户填写
    • 用户填写表单并将其发布到/创建
    • 该职位被路由到您的控制器上的创建操作
    • 在您的操作方法中,使用发布的数据。
    • 你的模型应该验证自己。
    • 如果模型有效,您的控制器应该阅读。
    • 如果模型有效,请将其保存到数据库中。重定向到/ show以呈现您的对象的show View。
    • 如果模型无效,请将表单值和错误消息保存在TempData中,然后重新指向New操作。使用TempData中的数据填写表单域并显示错误消息。

验证框架将帮助你一起在这个过程中。另外,我认为ASP.NET MVC团队正在规划下一次预览的验证框架。

+0

优秀的总结!用示例 – Cherian 2009-04-09 04:10:54

0

Castle项目中有Castle.Components.Validator模块。它非常灵活和强大。它基于模型属性(或任何其他来源)生成验证规则,甚至可以使用jQuery,Prototype Validation,fValidate和其他来生成JS验证。 将验证程序从IValidationEngine接口中抽象出来是明智的。

3

至于我可以告诉大家仍然试图找出做到这一点的“标准”方式。这就是说,绝对看看Phil Haack和Scott Guthrie在MVC上的最新帖子,你会发现他们如何做的一些有趣的信息。当我只是为自己玩耍时,我为我生成的LinqToSql数据类创建了一个ModelBinder。你可以看看这篇文章,了解如何把一个基本模型绑定器:

ASP.Net MVC Model Binder

的在你的行动,如果你创造了一个“产品” ModelBinder的你只需要声明的动作,像这样:

public ActionResult New(Product prod)

只要你已经建立了它,模型联编程序将负责将发布的数据分配给对象属性。

后您的GetValue(),你可以实现你想要的任何验证,是否使用异常的,正则表达式的,或者任何你可以像调用方法中:

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

然后,您可以在视图中仅显示<%= Html.ValidationSummary()%>以显示所有错误。

对于客户端验证,我只是使用jQuery。在设置好基本示例之后,您可以开始将所有这些与部分视图和Ajax调用结合起来进行一些有趣的事情。