【问题标题】:MVC4 JQuery validate fails to validate non-required fieldsMVC4 JQuery validate 无法验证非必填字段
【发布时间】: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 编辑器应验证只能输入数字,但它允许输入字母等。计数器编辑器阻止输入字母。

我也尝试使用正则表达式来验证非必填字段,但这与数字验证一样被忽略了。

有什么想法吗?

【问题讨论】:

    标签: jquery asp.net-mvc validation asp.net-mvc-4


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多