我一直绞尽脑汁但却看不出这有什么问题。验证在整个站点中工作正常,但它不会触发此输入。我正在使用.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*"));
答案 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错误(在控制台选项卡上)。