使用万无一失和 requiredif 来验证字符串字段
Using foolproof and requiredif to validate a string field
我的数据模型中有以下字段:
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>
如果联合帐户复选框被填充,我试图确保在此处输入数据,但它似乎不会仅在标题下拉列表中的文本框上抛出任何验证错误,这里有什么想法吗?
我最近 运行 遇到了同样的问题。尝试将 .EditorFor()
替换为 .TextBoxFor()
:
@Html.TextBoxFor(model => model.JointAccountFirstName, new { htmlAttributes = new { @class = "form-control" } })
不确定为什么这是 Foolproof 的问题,但它对我有用。
您手动创建了 <select>
元素,但没有添加 jquery.validate.unobtrusive.js
所需的必要 data-val-*
属性来为 jquery.validate.js
添加规则,因此您永远无法获得 jquery 对 <select>
的验证(请注意 required
属性是 HTML5 验证,而不是 jquery 验证)。
如果您声称您在 JointAccountTitle
属性(下拉列表)上获得验证,但在 JointAccountFirstName
(文本框)上没有获得验证,则意味着 jquery 客户端甚至没有触发侧面验证。最可能的原因是您没有加载正确的脚本,或者它们以错误的顺序加载。你需要
jquery-{version}.js
jquery.validate.js
jquery.validate.unobtrusive.js
mvcfoolproof.unobtrusive.js
要对 select 列表进行 jquery 验证,您需要将相关的 data-val-
属性添加到您的手册中 html,或者更好的是,生成您的下拉列表使用 DropDownListFor()
方法
@Html.DropDownListFor(m => m.JointAccountTitle, Model TitleList, "Please select title", new { @ class="form-control input })
其中 TitleList
是视图模型中的 IEnumerable<SelectListItem>
属性,其中包含选项
的值
我的数据模型中有以下字段:
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>
如果联合帐户复选框被填充,我试图确保在此处输入数据,但它似乎不会仅在标题下拉列表中的文本框上抛出任何验证错误,这里有什么想法吗?
我最近 运行 遇到了同样的问题。尝试将 .EditorFor()
替换为 .TextBoxFor()
:
@Html.TextBoxFor(model => model.JointAccountFirstName, new { htmlAttributes = new { @class = "form-control" } })
不确定为什么这是 Foolproof 的问题,但它对我有用。
您手动创建了 <select>
元素,但没有添加 jquery.validate.unobtrusive.js
所需的必要 data-val-*
属性来为 jquery.validate.js
添加规则,因此您永远无法获得 jquery 对 <select>
的验证(请注意 required
属性是 HTML5 验证,而不是 jquery 验证)。
如果您声称您在 JointAccountTitle
属性(下拉列表)上获得验证,但在 JointAccountFirstName
(文本框)上没有获得验证,则意味着 jquery 客户端甚至没有触发侧面验证。最可能的原因是您没有加载正确的脚本,或者它们以错误的顺序加载。你需要
jquery-{version}.js
jquery.validate.js
jquery.validate.unobtrusive.js
mvcfoolproof.unobtrusive.js
要对 select 列表进行 jquery 验证,您需要将相关的 data-val-
属性添加到您的手册中 html,或者更好的是,生成您的下拉列表使用 DropDownListFor()
方法
@Html.DropDownListFor(m => m.JointAccountTitle, Model TitleList, "Please select title", new { @ class="form-control input })
其中 TitleList
是视图模型中的 IEnumerable<SelectListItem>
属性,其中包含选项