客户端验证在具有“if”条件的asp.net mvc 1中不起作用

时间:2011-08-18 22:35:50

标签: asp.net-mvc validation

之前我问过这个问题,但我决定更具体,所以也许有人可以提供帮助。

我的问题是关于这个特殊问题:

在ASP.NET MVC应用程序中。我有一个复选框,“Food / Bev”,它是一个布尔类型,我在表单上有一个“选择”列表,我想知道如何管理它:

如果选中该复选框:

  • 下拉列表“Caterer”成为必填字段。

  • 除非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”条件不起作用。

1 个答案:

答案 0 :(得分:-1)

我认为这里的问题只是Ifate逻辑没有被ValidateInput属性验证;假设你当然正在使用它。

因为MVC1不进行客户端验证,所以这可能是您可以根据您的特定要求实现它的情况之一。

在表单提交中添加Javascript提交功能,然后您可以检查复选框的状态以及选择列表是否具有有效选择,如果不是则返回false。

如果检查输出代码,可以找到验证逻辑所放置的CSS类名,这样就可以模拟相同的行为。

另外,我知道这不是一个解决方案,但是如果你可以升级到更高版本的MVC我会尝试它,MVC3中不引人注意的ClientSide验证是非常优越的,任何可以避免服务器往返的东西我的书很好。