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

c# asp.net-mvc validation

5711 观看

16回复

2109 作者的声誉

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

作者: samiq 的来源 发布者: 2008 年 8 月 19 日

回应 (16)


1

2109 作者的声誉

我的方式:

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

我也一直关注Stephen Walther关于MVC的想法,我认为这篇文章非常适合重新填充提交的数据字段,然后再次提交。

你们用的是什么?

作者: samiq 发布者: 19.08.2008 07:10

5

17145 作者的声誉

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

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

ASP.NET MVC的基于模型的客户端验证

作者: Dale Ragan 发布者: 19.08.2008 07:32

1

16317 作者的声誉

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

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

作者: Chuck 发布者: 19.08.2008 07:36

6

17145 作者的声誉

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

更新:

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

另外,这是一个关于使用它们来创建Stephen Walther的弹出日历的教程

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

作者: Dale Ragan 发布者: 19.08.2008 08:14

0

31090 作者的声誉

Dale Ragan写道:

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

如何在Stack Overflow上处理AJAX?JQuery做到了吗?在他的Coding Horror帖子中,Jinjas写了关于在编写Stack Overflow时使用JQuery的秘密

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

作者: Zack Peterson 发布者: 19.08.2008 08:26

1

17145 作者的声誉

@ 扎克:叶氏,我看了那个帖子也和基于关闭该职位,SO用了jQuery作为其JavaScript库。我不能代表SO团队,但我有根据的猜测是,他们更有可能使用jquery中的ajax功能来处理他们的ajax请求。如果你使用像jQueryPrototypeMooTools这样的javascript库,那么手动编码实际上并不是那么糟糕。然后,为您的操作使用新的JsonResult ActionResult返回值,并对它们发出ajax请求。这些库为您封装了XmlHttpRequest对象,并使ajax调用和浏览器安全变得容易。

作者: Dale Ragan 发布者: 19.08.2008 08:50

0

17145 作者的声誉

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

作者: Dale Ragan 发布者: 19.08.2008 08:55

1

32228 作者的声誉

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

作者: Dane O'Connor 发布者: 21.08.2008 04:57

0

85571 作者的声誉

如何在Stack Overflow上处理AJAX?JQuery做到了吗?

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

:-)

作者: Orion Edwards 发布者: 25.08.2008 02:20

26

1162 作者的声誉

决定

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

此外,可以在此处找到一个示例MVC控制器方法该方法基本上使用JsonResult操作类型,如:

public JsonResult CheckUserName(string username)
{
    return Json(CheckValidUsername(username));
}
作者: Daniel Pollard 发布者: 25.08.2008 03:04

4

12752 作者的声誉

1

120 作者的声誉

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

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

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

作者: Kasper 发布者: 07.09.2008 10:32

1

2704 作者的声誉

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



class User {

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

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

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

这里阅读帖子

作者: Emad 发布者: 02.11.2008 03:26

6

23241 作者的声誉

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

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

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

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

我写了一篇博客文章,描述了所有细节。

作者: Adrian Grigore 发布者: 21.06.2009 11:59

0

72996 作者的声誉

如果你想坚持开箱即用的功能,但需要扩展它,请看看我在这里回答有关IDataError的问题。

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

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

作者: Simon_Weaver 发布者: 17.01.2010 01:01

0

2047 作者的声誉

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

作者: Bikal Lem 发布者: 09.08.2010 09:14
32x32