【问题标题】:Custom Model Validation based on two properties. One influence the other one基于两个属性的自定义模型验证。一个影响另一个
【发布时间】:2011-07-16 06:37:09
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

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


【解决方案1】:

如果您不需要客户端验证,我建议您使用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】:

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

    【讨论】:

    • 有人有其他想法吗?
    【解决方案3】:

    作为一种完全不同的方法,您可以查看 Fluent Validation 项目 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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多