使用万无一失和requiredif来验证字符串字段

时间:2017-01-19 15:12:09

标签: entity-framework asp.net-mvc-5 data-annotations foolproof-validation

我的数据模型中有以下字段:

 public bool JointAccount { get; set; }

 [RequiredIf("JointAccount", "true", ErrorMessage = "Please select a Title")]
 public string JointAccountTitle { get; set; }

 [RequiredIf("JointAccount", "true", ErrorMessage = "Please enter first name")]
 public string JointAccountFirstName { get; set; }

我的观点中有以下内容:

<div class="form-group">
  @Html.Label("Joint Account?", htmlAttributes: new { @class = "control-label col-md-4" })
  <div class="col-md-8">
    <div class="checkbox">
      @Html.EditorFor(model => model.JointAccount)
      @Html.ValidationMessageFor(model => model.JointAccount, "", new { @class = "text-danger" })
    </div>
  </div>
</div>

<div class="form-group">
                        @Html.Label("Title", htmlAttributes: new { @class = "control-label col-md-4" })
                        <div class="col-md-8">
                            <select required style="width:100%;height:35px;border-radius:4px;padding-left:10px;" id="JointAccountTitle" name="JointAccountTitle" class="form-control input required">
                                <option value="">Please Select Title</option>
                                <option value="Mr">Mr</option>
                                <option value="Ms">Ms</option>
                                <option value="Miss">Miss</option>
                                <option value="Mrs">Mrs</option>
                                <option value="Fr">Fr</option>
                                <option value="Dr">Dr</option>
                                <option value="Prof">Prof</option>
                                <option value="Rev">Rev</option>
                                <option value="Sr">Sr</option>
                                <option value="Br">Br</option>
                            </select>
                            @Html.ValidationMessageFor(model => model.JointAccountTitle, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="form-group">
                        @Html.Label("First Name", htmlAttributes: new { @class = "control-label col-md-4" })
                        <div class="col-md-8">
                            @Html.EditorFor(model => model.JointAccountFirstName, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.JointAccountFirstName, "", new { @class = "text-danger" })
                        </div>
                    </div>

我正在尝试确保在此处输入数据是否已填写但是它似乎没有在标题的下拉列表中的文本框上抛出任何验证错误,这里有任何想法吗?

2 个答案:

答案 0 :(得分:0)

您手动创建<select>元素,而不是添加data-val-*所需的必要jquery.validate.unobtrusive.js属性,以便将规则添加到jquery.validate.js,这样您就永远无法获得jquery验证<select>(注意required属性是HTML5验证,而不是jquery验证。)

如果您声称要在JointAccountTitle属性(下拉列表)上进行验证,而不是在JointAccountFirstName(文本框)上进行验证,则表示甚至没有触发jquery客户端验证。最可能的原因是您没有加载正确的脚本,或者它们以错误的顺序加载。你需要

jquery-{version}.js
jquery.validate.js
jquery.validate.unobtrusive.js
mvcfoolproof.unobtrusive.js

要获取选择列表的jquery验证,您需要将相关的data-val-属性添加到手动html中,或者更好,使用DropDownListFor()方法生成下拉列表

@Html.DropDownListFor(m => m.JointAccountTitle, Model TitleList, "Please select title", new { @ class="form-control input })

其中TitleList是视图模型中包含选项值的IEnumerable<SelectListItem>属性

答案 1 :(得分:-1)

我最近遇到了同样的问题。尝试将.EditorFor()替换为.TextBoxFor()

@Html.TextBoxFor(model => model.JointAccountFirstName, new { htmlAttributes = new { @class = "form-control" } })

不确定为什么这对于Foolproof来说是一个问题,但它对我有用。