模型绑定和验证错误

时间:2013-08-01 19:03:27

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

我正在使用asp.net MVC3,我对这项技术很陌生。

我的模型的设计方式是,如果数据无效,属性将抛出验证错误。在这种情况下,属性不会设置无效数据。

当我重新显示编辑视图时,会显示验证错误消息;但是,用户先前输入的值已消失,因为它绑定的模型仅包含旧的有效数据。

例如,假设我有一个Person类,Name属性不能为空或空字符串,否则会抛出验证异常并阻止设置该属性。现在说用户从Name属性中删除值并尝试从网络中保存Person。将抛出并正确处理验证异常,以将错误添加到ModelState,以便它显示在屏幕上;但是,Name的旧值被重新显示,因为无效的空字符串从未进入属性。

我不知道如何解决这个问题,对此问题的任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:1)

我的建议是允许无效数据,但使用验证属性。你不会保存无效的实体,所以没有问题,这是目前的标准方法。如果您不想这样做,那就没有简单的解决方案。最简单的解决方案是使用Request.Form

中的信息

答案 1 :(得分:0)

您应该实现IValidatableObject以在服务器端执行此类验证。

来自MSDN IValidatableObject Interface

  

为对象提供无效方式。

这里有一个例子Using IValidatableObject Custom Validation,也来自MSDN。

答案 2 :(得分:0)

此问题的解决方案是创建一个ViewModel,允许将无效数据输入此中。这个解决方案还简化了我的ModelBinder类,因为它承担了大部分工作。