基于两个属性的自定义模型验证。一个影响另一个
-
24-10-2019 - |
题
我将ASP.NET MVC 2与实体框架4一起使用。以下是:我有一个复选框和一个文本框(日期选择器)。如果检查了复选框,则需要文本框。如果复选框为false,则不需要文本框。
复选框true =>需要文本框
复选框false =>不需要文本框
<%:Html.CheckBoxFor(model => model.oEnvironment.Remediate) %>
<%= Html.TextBoxFor(model => model.oEnvironment.DatePick)%>
我知道如何创建验证词,但是我不知道如何创建验证类,该类验证是否检查了复选框(如果我的实体补救属性为TRUE),然后根据需要将DatePick字段放置。
任何想法 ?
解决方案
尝试这个 关联. 。它应该帮助您入门。
其他提示
如果您不需要客户验证,我建议您使用 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,
斯坦法恩。
您可能能够实施 idataErrorinfo 模型上的接口,尽管我自己从未尝试过。
作为一种完全不同的方法,您可以看一下流利的验证项目 http://fluentvalidation.codeplex.com/ 通过控制容器的反转与MVC效果很好 http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=documentation 和 http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container/
这应该使您能够很好地编码此规则,并且IOC文章显示了如何集成到MVC <3中
(并不是您所说的MVC2的严格答案 http://www.asp.net/mvc/mvc3#bm_model_validation_improvements )
对于复杂验证,只需在操作中(或服务器端的任何地方)执行验证。