使用 ASP.NET MVC 实现字段验证的最佳方法是什么?
-
08-06-2019 - |
题
我正在使用 ASP.NET 构建一个公共网站,作为可交付成果的一部分,我需要创建一个管理站点来输入公共站点中显示的内容的数据,我想知道人们使用什么技术或程序来使用 ASP 验证条目.NET MVC。
解决方案
看看 JQuery 验证插件 这个插件太棒了,它实现起来很干净,并且具有您可能需要的所有功能,包括通过 AJAX 进行远程验证。
还可以找到示例 MVC 控制器方法 这里 它基本上使用 JsonResult 操作类型,例如:
public JsonResult CheckUserName(string username)
{
return Json(CheckValidUsername(username));
}
其他提示
IMO 将 xVal 与 jQuery 和 DataAnnotationsModelBinder 结合使用是最佳组合。
但有时,有些验证规则无法完全在客户端进行检查,因此您需要使用远程客户端验证。
我找到了使用 xVal / jQuery.validate 一般实现远程客户端验证的方法,以便
- 验证规则仅保留在 ASP.NET MVC 模型中
- 每个验证规则只需编写一次,并且只能使用易于测试的 C# 代码。没有 JavaScript 或其他客户端对应项。
- 无需分支或以其他方式修改 xVal 或 jquery.validate
- 对于每个新的远程表单验证规则,您所要做的就是从本文中显示的基类派生。
我写了一个 博客文章 在此描述所有细节。
我喜欢用 实时验证 我的 ASP.NET MVC 应用程序中的库。有了它,我能够设置一种在客户端和服务器上进行验证的方法。这样,用户在提交表单之前就知道出了问题,然后使用服务器端功能来处理其他异常情况。
我从这篇文章开始,它在如何设置类似的设置方面做得非常好:
我的方式:
我遵循预览版 4 版本附带的帐户控制器中显示的示例,其中在控制器中检查字段,如果遇到错误,则会聚合字符串错误数组,以便稍后在启动该视图的同一视图中显示。要求。
我也一直在关注的想法 斯蒂芬·沃尔特谈 MVC 我认为 这个帖子 最好用提交的数据重新填充字段,以便在再次提交之前进行更改。
你们都用什么?
您看过 AjaxToolKit 提供的控件吗?我使用了 MaskedEditExtender 和 ValidatorCalloutExtender,并对结果非常满意。
@Dale - 感谢您纠正我的错误!不知道这一点(上周刚刚开始使用该工具包)。请忽略我的建议:)
混合使用客户端验证和服务器端验证。
对于客户端验证,中描述的方法 丹尼尔·波拉德的回答 看起来不错。客户端验证不是强制性的,但将为用户提供更好、响应更快的体验。
另一方面,服务器端验证应该是强制性的:永远不要相信客户的输入。我肯定会研究预览版 5 中 ASP.NET MVC 框架提供的功能(如 马特·辛兹的回答),
我最喜欢的方式是使用基于模型的属性执行客户端和服务器验证。我写了一篇关于此的简短文章并发布了源代码,这基本上允许您创建这样的类
class User {
[Required]
public string Name{get;set;}
[Email][Required]
public string Email {get;set;}
}
并且将生成适当的 JavaScript 代码来执行客户端验证,并且服务器端验证运行程序将验证您提交的表单。
把帖子读一遍 这里
@查克 - 不用担心。这就是 SO 的用途。你学到了一些东西,提出问题的人也学到了一些东西。
Stack Overflow 上如何处理 AJAX?JQuery 能做到吗?
- 右键点击页面
- 在弹出菜单中查找“查看页面源代码”
- 点击它
:-)
如果您想坚持使用开箱即用的功能但需要扩展它,请查看 我的回答在这里 关于 IDataError 的问题。
基本上我使用数据注释和模型绑定器来实现更复杂的逻辑。我发现这是一种非常干净的方式,让我能够保持在 MS 提供的范围内。
我解释如何使用 modelbinder 添加模型的“类级别”检查,而无需使用 IDataError
- 正如您在这里所看到的,这可能非常笨拙。它仍然允许您使用 [Required] 属性或您拥有的任何其他自定义验证属性,但允许您添加或删除单个模型错误。有关如何使用数据注释的更多信息,我强烈推荐 这篇文章来自斯科特·顾.
在 ASP.NET MVC 中实现验证的方法之一是使用数据注释和客户端验证。这 文章 展示了我们如何为实体框架生成的模型类做到这一点。
戴尔·拉根 写道:
无法在 ASP.NET MVC 中使用 AjaxToolKit 控件
Stack Overflow 上如何处理 AJAX?JQuery 能做到吗?在他的《编码恐怖》帖子中 JavaScript 忍者的秘密 Jeff 在撰写 Stack Overflow 时写了有关使用 JQuery 的文章。
他们肯定不是手工编码的。当术语“AJAX”在 2005 年左右流行时,我对所有 XMLHttpRequest JavaScript 都这样做过一次。这是一场噩梦。