基于两个属性的自定义模型验证。一个影响另一个

时间:2011-03-16 02:22:25

标签: asp.net-mvc-2 entity-framework-4 validation validationattribute

我在实体框架4中使用Asp.Net MVC 2。 情况如下:我有一个复选框和一个文本框(日期选择器)。 如果选中该复选框,则需要文本框。如果复选框为false,则不需要文本框。
Checkbox True =>需要文本框
Checkbox False =>不需要文本框

<%:Html.CheckBoxFor(model => model.oEnvironment.Remediate) %>
<%= Html.TextBoxFor(model => model.oEnvironment.DatePick)%>

我知道如何创建ValidationAttribute但我不知道如何创建一个验证类来验证是否选中了复选框(如果我的Entity Remediate Attribute为true),然后根据需要放置DatePick字段。

任何想法?

5 个答案:

答案 0 :(得分:4)

试试这个link。它应该可以帮助你开始。

答案 1 :(得分:2)

如果您不需要客户端验证,我建议您使用ModeState.AddModelError来测试您的逻辑(在您的控制器中)。

类似的东西:

[HttpPost]
public ActionResult Edit(MyModel model)
{
        if (model.Remediate && string.IsNullOrEmpty(model.DatePick))
            ModelState.AddModelError("DatePickRequired", "DatePick is required");
        if (!ModelState.IsValid)
            return View(model);
        return View();
}

GTZ,
斯特凡。

答案 2 :(得分:0)

您可以在模型上实现IDataErrorInfo界面,但我自己也没有尝试过。

答案 3 :(得分:0)

作为一种完全不同的方法,您可以查看Fluent验证项目http://fluentvalidation.codeplex.com/,该项目通过反转控制容器http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=Documentationhttp://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container/

与MVC很好地配合使用

这应该使你能够很好地编写这个和类似的规则,IOC文章展示了如何集成到MVC&lt; 3

(不是严格的答案,因为你说过MVC2,但升级到MVC3会使这更容易,因为它支持模型级别验证http://www.asp.net/mvc/mvc3#BM_Model_Validation_Improvements

答案 4 :(得分:0)

对于复杂验证,只需在操作中(或服务器端的任何位置)执行验证。