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

发布于 2024-10-21 21:49:55 字数 440 浏览 2 评论 0原文

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

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

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

有什么想法吗?

I Use Asp.Net MVC 2 with entity framework 4.
Here is the situation : I Have a checkbox and a textbox(Date Picker).
If the checkbox is checked, the textbox is required. If the checkbox is false, the textbox is not required.
Checkbox True => Textbox Required
Checkbox False => Textbox not required

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

I know how to create a ValidationAttribute but I dont know how to create a validation class that verify if the checkbox is checked (if my Entity Remediate Attribute is true) and then put the DatePick field as required.

Any Idea ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

兲鉂ぱ嘚淚 2024-10-28 21:49:55

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

史蒂芬.

If you don't need client validation, I suggest that you use ModeState.AddModelError to test your logic (in your controller).

Something like:

[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,

Stéphane.

要走干脆点 2024-10-28 21:49:55

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

You might be able to implement the IDataErrorInfo interface on your model, although I haven't ever tried this myself.

御守 2024-10-28 21:49:55

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

这应该使您能够编码这个和类似的规则非常好,并且 IOC 文章展示了如何集成到 MVC<3

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

As a totally different approach, you could take a look at the Fluent Validation project http://fluentvalidation.codeplex.com/ which plays well with MVC via an inversion of control container http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=Documentation and http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container/

This should enable you to code this and similar rules really well, and the IOC articles show how to integrate into MVC<3

(not strictly an answer as you stated MVC2 but an upgrade to MVC3 would make this easier too as it supports model level validation http://www.asp.net/mvc/mvc3#BM_Model_Validation_Improvements )

他是夢罘是命 2024-10-28 21:49:55

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

For complex validation, just perform the validation in the action (or anywhere on the server side).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文