之前我问过这个问题,但我决定更具体,所以也许有人可以提供帮助。
我的问题是关于这个特殊问题:
在ASP.NET MVC应用程序中。我有一个复选框,“Food / Bev”,它是一个布尔类型,我在表单上有一个“选择”列表,我想知道如何管理它:
如果选中该复选框:
下拉列表“Caterer”成为必填字段。
除非Caterer选项为
,否则无法提交请求
从列表中选择。
如果未选中该复选框:
副virsa。
在模型中我有这段代码:
if (string.IsNullOrEmpty(Caterer)
&& (FoodBeverage == true))
yield return new RuleViolation("Caterer", "Caterer is a required field");
在视图中我把这段代码: 对于“选择”字段“Caterer”:
<label for="Caterer">Caterer</label>
<% if (Model.Request.Caterer == null && Model.Request.FoodBeverage !=null) %>
<select name="Caterer", "required">
<option>A</option>
<option>B</option>
<option>C</option>
对于“复选框”字段“Food / Bev”:
<% if (!Model.Request.FoodBeverage && Model.Request.Caterer == null) %>
<%= Html.CheckBox("FoodBeverage", Model.Request.FoodBeverage, new { @class = "required" })%>
<%= Html.ValidationMessage("FoodBeverage", "*")%>
问题是系统在两种情况下都将这些字段视为“必需”:如果它们都是“空”,并且如果选择或检查其中一个字段。
看起来表单上的“if”条件不起作用。
答案 0 :(得分:-1)
我认为这里的问题只是Ifate逻辑没有被ValidateInput属性验证;假设你当然正在使用它。
因为MVC1不进行客户端验证,所以这可能是您可以根据您的特定要求实现它的情况之一。
在表单提交中添加Javascript提交功能,然后您可以检查复选框的状态以及选择列表是否具有有效选择,如果不是则返回false。
如果检查输出代码,可以找到验证逻辑所放置的CSS类名,这样就可以模拟相同的行为。
另外,我知道这不是一个解决方案,但是如果你可以升级到更高版本的MVC我会尝试它,MVC3中不引人注意的ClientSide验证是非常优越的,任何可以避免服务器往返的东西我的书很好。