ASP.NET MVC 3中的DRY远程验证

时间:2011-04-23 23:28:52

标签: validation asp.net-mvc-validation asp.net-mvc-3

我已经阅读了David Hayden在MVC 3 Remote validation上的精彩帖子。

但是,您还可以了解如何启用远程(javascript)验证。如果用户已禁用javascript,即使数据无效,仍会发布帖子。因此,应该进行服务器端验证。

我们怎样才能将此项检查视为干(不要重复自己)?当然,在后期操作中包含与远程验证操作(或同一个调用)中相同的检查代码可以工作,但我想知道是否可以使用单行或更优雅的东西。

完全可以接受的答案包括“不,不能做”。 :)

3 个答案:

答案 0 :(得分:4)

请参阅我的MSDN文章How to: Implement Remote Validation in ASP.NET MVC 我在HttpPost Create方法中使用远程客户端验证代码来禁用JavaScript时测试服务器端。

[HttpPost]
    public ActionResult Create(CreateUserModel model) {

        // Verify user name for clients who have JavaScript disabled
        if (_repository.UserExists(model.UserName)) {
            ModelState.AddModelError("UserName", ValidationController.GetAltName(model.UserName, _repository));
            return View("Create", model);
        }

答案 1 :(得分:2)

它'可以'完成..但你需要编写自己的自定义属性,基本上为客户端发出并且是经过验证的服务器端。对我来说,我只是将验证代码提取到方法中并检查服务器。 最近也出现了类似情况:

Prevent form from submitting when using unobtrusive validation in ASP.NET MVC 3

我想知道是否有人不能继承远程属性并添加自己的服务器端代码。嗯......也许我不得不试试这个。

如果有人在这里说他们已经这样做了,我会很高兴的。)

答案 2 :(得分:1)

我已经这样做了,这是一个很长的解决方案,所以我的博客上都可以找到它:

http://www.metaltheater.com/tech/technical/fixing-the-remote-validation-attribute/

我必须创建RemoteAttribute类的新子类,通过继承DefaultModelBinder创建我自己的自定义模型绑定器,然后使用反射来调用控制器上的验证器。