Foolproof RequiredIfTrue不适用于MVC5?

我正在尝试条件必填字段。 如果用户选择ContactByPhone复选框,我将显示ContactPhoneNumber字段,并且应该要求提交。 如果用户未选择ContactByPhoneContactPhoneNumber不可见且不是必需的。

validation未在客户端显示。 在我提交表单后, ModelState.IsValid对于此属性为false。

怎么办呢? 我想我在页面上引用了所有脚本。 我们是否有针对这种情况的替代解决方案?

模型

 public class Contact { [Display(Name = "by Phone")] public bool ContactByPhone { get; set; } [RequiredIfTrue("ContactByPhone", ErrorMessage = "Phone number is required")] public string ContactPhoneNumber { get; set; } } 

Index.cshtml

        
@Html.Label("How do you want to be contacted?", new { @class = "control-label" })
@Html.CheckBoxFor(model => model.ContactByPhone, new { @style = "margin-top: 8px"})
@Html.LabelFor(model => model.ContactPhoneNumber, new { @class = "control-label-nobold" })*
@Html.TextBoxFor(m => m.ContactPhoneNumber, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.ContactPhoneNumber, "", new { @style = "color:Red" })

调节器

在此处输入图像描述

生成的HTML

 

我猜你错过了MvcFoolproofJQueryValidation.min.jsMvcFoolproofValidation.min.js JS文件。 见下面的例子:

 @using (Html.BeginForm()) { @Html.AntiForgeryToken() 
@Html.ValidationSummary(true)
@Html.Label("How do you want to be contacted?", new { @class = "control-label" })
@Html.CheckBoxFor(model => model.ContactByPhone, new { @id = "myCheckBox", @style = "margin-top: 8px" }) @Html.ValidationMessageFor(model => model.ContactByPhone)
@Html.LabelFor(model => model.ContactPhoneNumber, new { @class = "control-label-nobold" })*
@Html.TextBoxFor(m => m.ContactPhoneNumber, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.ContactPhoneNumber, "", new { @style = "color:Red" })
} @section Scripts { @Scripts.Render("~/bundles/jqueryval") }

注意:我使用jquery来控制隐藏的div元素。