【问题标题】:MVC3 : different validation for different input scenariosMVC3:针对不同输入场景的不同验证
【发布时间】:2012-03-22 04:33:43
【问题描述】:

我在 php 中广泛使用了 框架,发现scenarios 非常有用。 总而言之,场景让您对不同的视图有不同的验证标准。

问题

我可以使用 mvc3 内置验证,但对不同的视图有不同的验证标准吗?是否有内置功能?

说明

在一个表单中我只想验证密码的更改,在另一个表单中我只想验证新的用户参数,而另一个地方只需要验证一些详细的数据输入。所有值都存储在同一个表中,但需要不同的输入值集

【问题讨论】:

  • 您应该考虑使用强类型视图模型来包装您的数据。这些可以根据需要保存您所需的验证。
  • 同意 Travis,如果你想对不同的视图有不同的验证逻辑,你应该为每个视图创建一个单独的视图模型。 asp.net/mvc/mvc3#BM_Model_Validation_Improvements
  • 有趣,看来我需要使用 IValidatableObject.. 让我能找到关于它的内容
  • 正如每个人都建议为不同的视图使用不同的 ViewModel,这样您的视图是干净的(没有逻辑仅表示)并且您的类(视图模型)承担单一责任。作为建议,您可以尝试 FluentValidation fluentvalidation.codeplex.com
  • 好吧,似乎可以选择为每个视图使用不同的视图模型(有点笨重,但逻辑和性能友好性要低得多)。

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


【解决方案1】:

不,因为内置框架验证是基于属性的,如果您在视图之间共享模型,则很难在运行时更改验证要求。

因此,最好的办法是为每个视图创建不同的模型。

如果您需要在运行时对模型应用自定义验证,则可以使用http://fluentvalidation.codeplex.com/

它不是内置的,但可以与现有的 ASP.NET MVC 验证组件一起使用,因此可以与不显眼的验证/模型状态等一起使用。

【讨论】:

  • FluentValidation 似乎也是一个不错的选择,但是我为每个视图使用了多个类来解决我的问题。我想我的问题的正确答案就在那里...... == NO,你不能在 asp.net 中有场景,而不是简单的方式。
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多