MVC4 JQuery validate 无法验证非必填字段
Posted
技术标签:
【中文标题】MVC4 JQuery validate 无法验证非必填字段【英文标题】:MVC4 JQuery validate fails to validate non-required fields 【发布时间】:2014-03-13 13:30:08 【问题描述】:如何让 MVC4/JQuery Validate 将验证应用于可空属性?
例如,我在模型中有 2 个数值属性:
[Required]
public int Counter get; set;
public int? CounterNonRequired get; set;
还有这个 Razor 代码:
<div class="editor-field">
@html.EditorFor(model => model.Counter)
@Html.ValidationMessageFor(model => model.Counter)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CounterNonRequired)
@Html.ValidationMessageFor(model => model.CounterNonRequired)
</div>
这会产生以下 HTML:
<div class="editor-field">
<input class="text-box single-line"
data-val="true"
data-val-number="The field Counter must be a number."
data-val-required="The Counter field is required."
id="Counter"
name="Counter"
type="number"
value="">
<span class="field-validation-valid"
data-valmsg-for="Counter"
data-valmsg-replace="true">
</span>
</div>
<div class="editor-field">
<input class="text-box single-line valid"
data-val="true"
data-val-number="The field CounterNonRequired must be a number."
id="CounterNonRequired"
name="CounterNonRequired"
type="number"
value="">
<span class="field-validation-valid"
data-valmsg-for="CounterNonRequired"
data-valmsg-replace="true">
</span>
</div>
CounterNonRequired 编辑器应验证只能输入数字,但它允许输入字母等。计数器编辑器阻止输入字母。
我也尝试使用正则表达式来验证非必填字段,但这与数字验证一样被忽略了。
有什么想法吗?
【问题讨论】:
【参考方案1】:这样试试,
查看
@using (Html.BeginForm("Page", "Controller", FormMethod.Post, new id = "FrmIndex" ))
<div>
@Html.TextBoxFor(model => model.Counter)
@Html.ValidationMessageFor(model => model.Counter)
</div>
<div>
@Html.LabelFor(m => m.CounterNonRequired)
@Html.EditorFor(m => m.CounterNonRequired)
@Html.ValidationMessageFor(m => m.CounterNonRequired)
</div>
<input type="submit" value="Save" style="float: left;" id="btnSave" title="btn" name="ButtonType" />
型号
public class RegisterModel
[Required]
public int Counter get; set;
public int? CounterNonRequired get; set;
脚本在视图中使用
<script src="~/Script/Jquery-1.8.1.min.js" type="text/javascript"></script>
<script src="@Url.Content("~/Script/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Script/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
它不允许在CounterNonRequired
文本框中输入字母,如果您在文本框中输入字母,它会触发类似The field CounterNonRequired must be a number.
的消息
【讨论】:
我使用的是包含在 MVC 模板中的 jquery 1.8.2。如您的示例所示,我退回到 1.8.1,但它仍然无法正常工作。您使用的是什么版本的 jquery.validate? @ChaoticNadirs 版本 1.8.0以上是关于MVC4 JQuery validate 无法验证非必填字段的主要内容,如果未能解决你的问题,请参考以下文章
MVC4 中带有 jquery.validate.unobtrusive 的文件