我已经阅读了David Hayden在MVC 3 Remote validation上的精彩帖子。
但是,您还可以了解如何启用远程(javascript)验证。如果用户已禁用javascript,即使数据无效,仍会发布帖子。因此,应该进行服务器端验证。
我们怎样才能将此项检查视为干(不要重复自己)?当然,在后期操作中包含与远程验证操作(或同一个调用)中相同的检查代码可以工作,但我想知道是否可以使用单行或更优雅的东西。
完全可以接受的答案包括“不,不能做”。 :)
答案 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
创建我自己的自定义模型绑定器,然后使用反射来调用控制器上的验证器。