5

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

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

我知道如何创建一个 ValidationAttribute 但我不知道如何创建一个验证类来验证复选框是否被选中(如果我的实体补救属性为真),然后根据需要放置 DatePick 字段。

任何想法 ?

4

4 回答 4

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,
斯蒂芬。

于 2011-06-17T21:06:31.557 回答
0

作为一种完全不同的方法,您可以查看 Fluent Validation 项目http://fluentvalidation.codeplex.com/通过控制容器的反转http://fluentvalidation.codeplex.com/wikipage?title与 MVC 配合得很好=mvc&referringTitle=文档http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container/

这应该使您能够很好地编写此规则和类似规则,并且 IOC 文章展示了如何集成到 MVC<3

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

于 2011-06-15T08:58:08.793 回答
0

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

于 2011-06-18T04:37:26.650 回答
0

您可能能够在您的模型上实现IDataErrorInfo接口,尽管我自己从未尝试过。

于 2011-03-16T20:58:00.757 回答