Foolproof RequiredIfTrue不适用于MVC5?
我正在尝试条件必填字段。 如果用户选择ContactByPhone
复选框,我将显示ContactPhoneNumber
字段,并且应该要求提交。 如果用户未选择ContactByPhone
则ContactPhoneNumber
不可见且不是必需的。
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.js
和MvcFoolproofValidation.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元素。