使用ASP.NET MVC实现字段验证的最佳方法是什么?

时间:2008-08-19 19:02:56

标签: c# asp.net-mvc validation

我正在使用ASP.NET构建一个公共网站,作为我需要为公共站点中显示的内容的数据输入执行管理站点的可交付成员的一部分,我想知道人们使用哪些技术或程序来验证使用ASP.NET MVC的条目。

15 个答案:

答案 0 :(得分:26)

看一下JQuery Validation plugin这个插件很棒,它实现起来很干净,并且具有您可能需要的所有功能,包括通过AJAX进行远程验证。

还可以找到一个示例MVC控制器方法here,它基本上使用JsonResult操作类型,如:

public JsonResult CheckUserName(string username)
{
    return Json(CheckValidUsername(username));
}

答案 1 :(得分:6)

@Chuck - 您还不能在ASP.NET MVC中使用AjaxToolKit控件。它们仅适用于ASP.NET页面回发模型。

更新

从2008年8月20日起,您可以使用ASP.NET MVC框架内的Ajax控件工具包的脚本文件。这是指向release的链接。

另外,here is a tutorial使用它们来创建Stephen Walther的弹出日历。

我只想确保每个人都获得正确的信息,如果他们阅读了这个帖子。

答案 2 :(得分:6)

IMO使用xVal与jQuery和DataAnnotationsModelBinder是最佳组合。

然而,有时候,验证规则无法在客户端完全检查,因此您需要使用远程客户端验证。

我想出了通过xVal / jQuery.validate一般性地实现远程客户端验证的方法,以便

  • 验证规则仅保留在ASP.NET MVC模型中
  • 您只需编写一次验证规则,并且只能在易于测试的C#代码中编写。没有JavaScript或其他客户端对应。
  • 无需分支或以其他方式修改xVal或jquery.validate
  • 您为每个新的远程表单验证规则所要做的就是从本文中显示的基类派生。

我写了一篇blog article来描述所有细节。

答案 3 :(得分:5)

我喜欢在我的ASP.NET MVC应用程序中使用LiveValidation库。有了它,我能够设置一种在客户端和服务器上进行验证的方法。这样,用户在提交表单之前就会知道出错了,然后将服务器端功能用于其他异常情况。

我从这篇文章开始,它在如何设置类似的设置方面做得非常好:

Model-based Client-side Validation for ASP.NET MVC

答案 4 :(得分:1)

我的方式:

我按照预览4版本附带的帐户控制器中显示的示例,其中字段在控制器中检查,如果遇到错误,则汇总字符串错误数组以供稍后在同一视图中显示这启动了请求。

我也一直在关注Stephen Walther on MVC的想法,我认为this post非常适合重新填充提交的数据字段,然后再次提交。

你们有什么用?

答案 5 :(得分:1)

你看过AjaxToolKit提供的控件吗?我使用了MaskedEditExtender和ValidatorCalloutExtender,对结果非常满意。

@Dale - 谢谢你纠正我的那个!没有意识到这一点(上周刚刚开始使用该工具包)。请忽略我的建议:)

答案 6 :(得分:1)

@ Zack :是的,我已经阅读了该帖子,并根据该帖子,SO使用jQuery作为他们的JavaScript库。我不能代表SO团队,但我有根据的猜测是,他们更有可能使用jquery中的ajax功能来处理他们的ajax请求。如果你使用像jQueryPrototypeMooTools这样的javascript库,那么手动编码实际上并不是那么糟糕。然后,为您的操作使用新的JsonResult ActionResult返回值,并对它们发出ajax请求。这些库为您封装了XmlHttpRequest对象,并且可以轻松地使ajax调用和浏览器安全。

答案 7 :(得分:1)

如果您想同时进行客户端/服务器端验证,则可以在codeplex上使用.net validation framework。它根据模型中定义的规则为jQuery validate插件生成代码。此外,如果您使用框架的“高级”功能,您可以手动控制jQuery验证插件的设置。查看mvc quickstart

答案 8 :(得分:1)

使用客户端验证和服务器端验证的混合。

对于客户端验证,answer by Daniel Pollard中描述的方法看似合理。客户端验证不是强制性的,但会为用户提供更好,更灵敏的体验。

另一方面,服务器端验证应该是强制性的:永远不要信任来自客户端的输入。我肯定会研究预览5中ASP.NET MVC框架提供的功能(如answer by Matt Hinze中所述),

答案 9 :(得分:1)

我最喜欢的方式是使用基于模型的属性执行客户端和服务器验证。我写了一篇关于此的简短帖子并发布了源代码,这基本上可以让你创建一个像这样的类



class User {

    [Required]
    public string Name{get;set;}

    [Email][Required]
    public string Email {get;set;}
}

将生成相应的javascript代码以执行客户端验证,并且服务器端验证运行器将验证您提交的表单。

阅读here

上的帖子

答案 10 :(得分:0)

  

Dale Ragan 写道:

     

您不能在ASP.NET MVC中使用AjaxToolKit控件

如何在Stack Overflow上处理AJAX? JQuery做到了吗?在他的编码恐怖帖Secrets of the JavaScript Ninjas中,Jeff写了关于在编写Stack Overflow时使用JQuery的文章。

当然他们没有手工编码。当“AJAX”这个术语在2005年左右普及时,我用所有XMLHttpRequest JavaScript做过一次。这是一场噩梦。

答案 11 :(得分:0)

@ Chuck - 不用担心。这就是SO的用途。你学到了什么,问这个问题的人学到了什么。

答案 12 :(得分:0)

  

如何在Stack Overflow上处理AJAX? JQuery会这样做吗?

  • 右键单击页面
  • 在弹出菜单中查找“查看页面来源”
  • 点击

: - )

答案 13 :(得分:0)

如果您想坚持开箱即用的功能但需要扩展它,请查看my answer here有关IDataError的问题。

基本上我使用数据注释和模型绑定器来处理更复杂的逻辑。我发现它是一种非常干净的方式,让我保持在MS提供的范围内。

我解释了如何使用模型绑定器添加模型的“类级别”检查,而不必使用IDataError - 正如您在此处看到的那样,这可能非常笨拙。它仍然允许您使用[必需]属性或您拥有的任何其他自定义验证属性,但允许您添加或删除单个模型错误。有关如何使用数据注释的更多信息,我强烈建议this post from Scott Gu

答案 14 :(得分:0)

在ASP.NET MVC中实现验证的一种方法是使用数据注释和客户端验证。这个article显示了我们如何为实体框架生成的模型类做到这一点。