2011-04-23 78 views
1

我已阅读David Hayden在MVC 3 Remote validation上的杰出文章。在ASP.NET MVC 3中进行DRY远程验证

但是,介绍了您应该如何启用远程(javascript)验证。如果用户禁用了JavaScript,即使数据无效,该帖子仍会生成。因此应该进行服务器端验证。

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

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

回答

2

它'可以'完成..但你需要编写自己的自定义属性,基本上发射客户端和验证服务器端。对我来说,我只是将验证代码提取到一个方法中并检查服务器。 类似的东西最近想出还有:

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

我不知道如果想不出一个来自远程属性继承,并添加自己的服务器端代码它们。嗯..也许我必须试试这个。

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

+0

我已经完成了这个!我喜欢挑战:) http://www.metaltheater.com/tech/technical/fixing-the-remote-validation-attribute/ – Rocklan 2013-03-18 05:58:26

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

我已经做到了这一点,这是一个有点长的解决方案,所以它的所有可用在我的博客在这里:

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

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

+0

好博客文章! – 2013-11-04 11:54:01