使用ASP.NET MVC进行字段验证的最佳方法是什么?
我正在使用ASP.NET构建公共网站,作为可交付成果的一部分,我需要做一个管理站点来对公共站点中显示的内容进行数据输入,我想知道人们使用了哪些技术或者过程来验证使用ASP的输入.NET MVC。
解决方案
回答
我的方式:
我按照的是预览版4随附的"帐户"控制器中显示的示例,其中检查了控制器中的字段,如果遇到错误,则将汇总字符串错误数组,以供稍后在启动该视图的同一视图中显示要求。
我也一直在关注Stephen Walther在MVC上的想法,并且我认为这篇文章非常适合用重新提交的数据重新填充字段,以便在再次提交之前进行更改。
你们用什么?
回答
我喜欢在ASP.NET MVC应用程序中使用LiveValidation库。有了它,我能够设置一种在客户端和服务器上进行验证的方法。这样,用户甚至可以在提交表单之前就知道出了点问题,然后将服务器端功能用于其他异常情况。
我从这篇文章开始,它在如何设置类似设置方面做得非常好:
ASP.NET MVC的基于模型的客户端验证
回答
我们是否看过AjaxToolKit随附的控件?我使用了MaskedEditExtender和ValidatorCalloutExtender,并对结果感到非常满意。
@戴尔感谢我们对我的纠正!尚不知道(上周才开始使用该工具包)。请无视我的建议:)
回答
@Chuck我们还不能在ASP.NET MVC中使用AjaxToolKit控件。它们仅在ASP.NET页面回发模型中起作用。
更新:
从2008年8月20日开始,我们可以在ASP.NET MVC框架内部使用仅Ajax Control Toolkit的脚本文件。这是该版本的链接。
另外,这是Stephen Walther撰写的有关如何使用它们创建弹出式日历的教程。
我只想确保每个人(如果他们阅读此主题)都获得了正确的信息。
回答
Dale Ragan wrote: You can't use the AjaxToolKit controls in ASP.NET MVC
如何在堆栈溢出中处理AJAX? JQuery会这样做吗? Jeff在他的《 Coding Horror》一书中写道,《 JavaScript忍者的秘密》讲述了在编写Stack Overflow时使用JQuery。
当然,他们没有手工编码。当术语" AJAX"在2005年左右流行时,我曾经使用所有XMLHttpRequest JavaScript进行过一次。这是一场噩梦。
回答
@Zack:是的,我也阅读了该文章,并且基于该文章,SO使用jQuery作为其JavaScript库。我不能代表SO团队发言,但是我的有根据的猜测是,他们很有可能使用jquery内部的ajax功能来处理其ajax请求。如果我们使用jQuery,Prototype和MooTools之类的javascript库,那么手工编写实际上并不是那么糟糕。然后,将新的JsonResult ActionResult返回值用于操作,并针对它们进行ajax请求。这些库为我们封装了XmlHttpRequest对象,并易于进行ajax调用和浏览器安全。
回答
@Chuck不用担心。那就是SO的目的。我们学习了一些东西,问这个问题的人也学到了东西。
回答
如果我们要同时进行客户端/服务器端验证,则可以在Codeplex上使用.net验证框架。它根据模型中定义的规则为jQuery validate插件生成代码。另外,如果我们使用框架的"高级"功能,则可以手动控制jQuery validate插件的设置。签出MVC快速入门。
回答
How is AJAX handled on Stack Overflow? Does JQuery do it?
- 右键单击页面
- 在弹出菜单中查找"查看页面源"
- 点击它
:-)
回答
看一下JQuery Validation插件,这个插件很棒,实现起来很干净,并且具有我们可能需要的所有功能,包括通过AJAX进行的远程验证。
也可以在此处找到一个示例MVC控制器方法,该方法基本上使用JsonResult操作类型,例如:
public JsonResult CheckUserName(string username) { return Json(CheckValidUsername(username)); }
回答
预览5中有一些新的验证功能。
http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx
回答
混合使用客户端验证和服务器端验证。
对于客户端验证,Daniel Pollard的答案中描述的方法似乎是正确的。客户端验证不是强制性的,但它将为用户提供更好的响应性体验。
另一方面,服务器端验证应该是强制性的:永远不要信任来自客户端的输入。我一定要研究一下Preview 5中ASP.NET MVC框架提供的功能(如Matt Hinze的回答所述),
回答
我最喜欢的方式是使用基于模型的属性执行客户端和服务器验证。我写了一篇简短的文章,并发布了源代码,基本上可以让我们创建这样的类
class User { [Required] public string Name{get;set;} [Email][Required] public string Email {get;set;} }
并且将生成适当的javascript代码以执行客户端验证,而服务器端验证运行程序将验证我们提交的表单。
在这里阅读帖子
回答
IMO将xVal与jQuery和DataAnnotationsModelBinder结合使用是最佳组合。
但是,有时有些验证规则无法在客户端完全检查,因此我们需要使用远程客户端验证。
我想出了使用xVal / jQuery.validate通用实现远程客户端验证的方法,以便
- 验证规则仅保留在ASP.NET MVC模型中
- 我们只需用易于测试的C#代码编写一次每个验证规则。没有JavaScript或者其他客户端对应物。
- 无需分支或者修改xVal或者jquery.validate
- 对于每个新的远程表单验证规则,我们要做的就是从本文中显示的基类派生。
我为此写了一篇博客文章,描述了所有细节。
回答
如果我们想使用现成的功能但需要扩展它,请查看我对IDataError问题的回答。
基本上,我使用数据注释和Modelbinder处理更复杂的逻辑。我发现这是一种非常干净的方法,可以让我始终处于MS提供的范围之内。
我将说明如何使用Modelbinder添加模型的"类级"检查,而不必使用" IDataError",正如我们在此处看到的那样,它可能很笨拙。它仍然可以让我们使用[Required]属性或者任何其他自定义验证属性,但是可以添加或者删除单个模型错误。有关如何使用数据注释的更多信息,我强烈建议Scott Gu撰写此帖子。
回答
在ASP.NET MVC中实现验证的一种方法是将数据注释与客户端验证一起使用。本文说明了如何针对实体框架生成的模型类执行此操作。