我在实体框架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字段。
任何想法?
答案 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=Documentation和http://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)
对于复杂验证,只需在操作中(或服务器端的任何位置)执行验证。