使用jQuery验证的MVC Razor View不验证空字段

时间:2014-03-18 15:51:55

标签: jquery asp.net-mvc validation razor

我的表单是根据MVC模型构建的,具有各种验证要求。如果我输入字段并输入不正确的值(不匹配正则表达式或满足最小长度),则验证工作正常。

它没有做的是验证空白的必填字段

这是我模特的摘录:

public partial class Order
{
    public int Id { get; set; }
    [Required]
    [Display(Name = "Name")]
    public string ContactName { get; set; }
    [Required]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid phone number")]
    [Display(Name = "Phone")]
    public string ContactPhone { get; set; }
    [Display(Name="Email")]
    [Required(ErrorMessage = "Email is required")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string ContactEmail { get; set; }
}

当我运行$("#OrderForm").validate().form()时,如果必填字段为空,则返回true。

以下是生成的标记:

<form action="/Order/SubmitOrder" id="OrderForm" method="post">
<table width="400">
    <tr>
        <th colspan="2">Contact Information</th>
    </tr>
    <tr>
        <td><label for="OrderInfo_ContactName">Name</label></td>
        <td><input class="text-box single-line" data-val="true" data-val-required="The Name field is required." id="OrderInfo_ContactName" name="OrderInfo.ContactName" type="text" value="" /></td>
    </tr>
    <tr>
        <td><label for="OrderInfo_ContactEmail">Email</label></td>
        <td><input class="text-box single-line" data-val="true" data-val-email="The Email field is not a valid e-mail address." data-val-required="Email is required" id="OrderInfo_ContactEmail" name="OrderInfo.ContactEmail" type="email" value="" /></td>
    </tr>
</table>
<input id="ordersubmit" type="submit" value="Submit" />
</form>

以下是我的脚本标记:

<script src="/Scripts/jquery-1.10.2.js"></script>
<script src="/Scripts/jquery-ui-1.10.4.custom.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/order.js"></script>

我错过了什么?

2 个答案:

答案 0 :(得分:0)

这对我来说是开箱即用的,但只有当我记得包含包含所有不显眼和验证脚本的包时。在现代ASP.NET MVC中,有一个名为~/bundles/jqueryval的包,其定义为:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));

确保将其包含在视图或布局中。

答案 1 :(得分:0)

我正在使用

初始化document.ready中的验证器
$(document).ready(function () {
    $("#OrderForm").removeAttr("novalidate");
    $("#OrderForm").validate({ ignore: [] });
});

以前,我的表单中添加了“novalidate”属性。我不知道为什么。一旦我删除了这两行,它按预期工作。我不确定为什么会这样,只是。

感谢您提供意见。