【问题标题】:ASP.NET MVC3 and server side validationASP.NET MVC3 和服务器端验证
【发布时间】:2011-07-26 15:49:26
【问题描述】:

假设用户禁用了 javascript,因此客户端验证在 MVC3 中不起作用。

实现服务器端验证以便在用户尝试以不适当的方式处理数据时仍显示验证消息的最佳方法是什么?

谢谢!

编辑:

显然它正在发生,因为我使用的是 EF 生成的模型,并且它们在属性设置器中使用“StructuralObject.SetValidValue”方法。这会导致在 MVC 验证模型之前引发异常。

我现在正试图找到一种方法来规避这个问题......

【问题讨论】:

  • 您能分享一下您的解决方案吗?我也遇到了同样的问题,不知道怎么解决。
  • 老实说我不记得解决方案了...抱歉。
  • 实际上,我刚刚记得如果在抛出异常时按 F5 并继续,页面应该会正确呈现。这种类型的异常会导致调试器中断,但不会在生产中发生。希望对您有所帮助。
  • 您不认为人们会在生产环境中输入错误的数据吗?我不敢苟同。

标签: c# .net asp.net asp.net-mvc-3


【解决方案1】:

嗯,您应该始终使用客户端和服务器端验证。如果您使用验证属性标记模型,则服务器端和客户端验证都应该可以正常工作。

我相信你已经看到了:http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

只需确保在服务器端验证操作中检查模型状态一次,一切都会正常运行。

【讨论】:

  • 这就是问题所在,尽管使用数据注释和客户端验证工作正常(启用时),但 ModelState.IsValid 每次都返回 true,即使模型实际上无效...
  • 但是你是怎么解决的?我现在在使用 EF 时遇到了同样的问题。
【解决方案2】:

ScottGu 在他的博客中建议为此使用数据注释。

附:该链接是关于 MVC2 的,this one 似乎更新。

【讨论】:

    【解决方案3】:

    查看 Scott Gu 关于该主题的博客。他做了一个如何处理这个的演练

    ASP.NET MVC 2: Model Validation

    【讨论】:

      【解决方案4】:

      如果您使用Data Annotations 进行验证,则无需执行任何操作。无论客户端是否已经这样做,服务器都会始终验证数据。

      【讨论】:

      • 它不太适合我。如果我禁用客户端验证,则会引发异常而不是显示错误消息。我试过使用 ModelState.IsValid 但无济于事......
      • 那么您的问题应该是“为什么我的服务器端验证不起作用?”或类似的东西。请发布您收到的异常以及引发异常的代码。
      • 请发布您的型号和控制器的代码。它将帮助我们确定发生错误的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2012-02-08
      • 2023-04-08
      • 2017-05-03
      • 2013-01-28
      • 1970-01-01
      相关资源
      最近更新 更多