验证文本框无效

时间:2013-12-03 19:33:32

标签: c# jquery regex asp.net-mvc validation

我一直绞尽脑汁但却看不出这有什么问题。验证在整个站点中工作正常,但它不会触发此输入。我正在使用.NET 4,MVC 4,EF 5,jQuery 1.8。有任何想法吗?

Schedule.cs

{
    [MetadataType(typeof(ScheduleMetaData))]
    public partial class Schedule
    {

    }

    public class ScheduleMetaData
    {
        [RegularExpression(@"^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$", ErrorMessage = "Invalid hex color")]
        [Required]
        public string Color { get; set; }
    } 
}

Schedule.cs(由EF建立)

{
    using System;
    using System.Collections.Generic;

    public partial class Schedule
    {
        public Schedule()
        {
            this.OriginDependency = new HashSet<Dependency>();
            this.EndpointDependency = new HashSet<Dependency>();
        }

        public int ScheduleId { get; set; }
        public string ScheduleName { get; set; }
        public string Color { get; set; }

        public virtual ICollection<Dependency> OriginDependency { get; set; }
        public virtual ICollection<Dependency> EndpointDependency { get; set; }
    }
}

Edit.cshtml

<div class="editor-label">
    @Html.LabelFor(model => model.Color)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Color)
    @Html.ValidationMessageFor(model => model.Color)
</div>

BundleConfig.cs (摘录)

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

3 个答案:

答案 0 :(得分:3)

两个部分类的命名空间必须相同。如果没有,.NET将把它作为两个不同的类,元数据将不起作用。正如@Rowan Freeman在评论中提到的那样,请确保两个类的命名空间相同。

答案 1 :(得分:1)

由于它们所在的文件夹可能有不同的命名空间,或者可能有不同的程序集来容纳这两个类。

由于缺少Edit.Cshtml的详细信息,可能会缺少包含: 该View / PartialView中的Scripts.Render("~/bundles/jqueryval")(检查浏览器控制台是否有错误)。

确保两个类具有相同的命名空间:

namespace ExampleNamespace
{
    [MetadataType(typeof(ScheduleMetaData))]
    public partial class Schedule
    {

    }

    public class ScheduleMetaData
    {
        [RegularExpression(@"^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$", ErrorMessage = "Invalid hex color")]
        [Required]
        public string Color { get; set; }
    } 
}

应该从这里获取ExampleNamespace: EF生成的类。     namespace ExampleNamespace     {         使用系统;         使用System.Collections.Generic;

    public partial class Schedule
    {
        public Schedule()
        {
            this.OriginDependency = new HashSet<Dependency>();
            this.EndpointDependency = new HashSet<Dependency>();
        }

        public int ScheduleId { get; set; }
        public string ScheduleName { get; set; }
        public string Color { get; set; }

        public virtual ICollection<Dependency> OriginDependency { get; set; }
        public virtual ICollection<Dependency> EndpointDependency { get; set; }
    }
}

答案 2 :(得分:0)

您的脚本包在哪里?如果您将包太晚包括在内,则验证将无效,因为它无法找到jquery.validate库。请检查您的捆绑包已完成的位置。

您也可以在Firefox(或Chrome的开发者工具)中使用Firebug,转到网络选项卡并检查是否正确加载了jquery.validate。当你在那里时,检查是否有任何其他javascript错误(在控制台选项卡上)。