【问题标题】:Validation of a textbox not working验证文本框不起作用
【发布时间】:2013-12-03 19:33:31
【问题描述】:

我一直在绞尽脑汁,但看不出这有什么问题。整个站点的验证工作正常,但不会因为这个输入而触发。我正在使用 .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 (sn-p)

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

【问题讨论】:

  • Schedule.cs 代码周围的括号是什么?
  • 什么是“这个输入”?
  • 我的 Schedule.cs 代码周围的大括号是项目命名空间。我的输入控件是由@Html.EditorFor(model => model.Color) 生成的……它是一个文本框。
  • 考虑检查输出 HTML/JavaScript 以确保生成的正则表达式及其周围的 if 语句看起来正确。
  • 两个Schedule 类肯定在同一个命名空间中吗?

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


【解决方案1】:

两个部分类的命名空间必须相同。如果不是,.NET 会将其视为两个不同的类,并且元数据将不起作用。正如@Rowan Freeman 在评论中提到的,请确保两个类的命名空间相同。

【讨论】:

    【解决方案2】:

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

    另外,由于 Edit.Cshtml 缺少详细信息,可能缺少包括: 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 生成的类。 命名空间示例命名空间 { 使用系统; 使用 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; }
        }
    }
    

    【讨论】:

    • [off topic] 你为什么批准the edit mentioned here?它应该被拒绝
    • 我一定是失手了,我想我误点击了编辑。
    【解决方案3】:

    您的脚本包包含在哪里?如果太晚包含捆绑包,则验证将不起作用,因为它找不到 jquery.validate 库。请检查您的捆绑包包含在哪里完成。

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

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2014-08-14
      相关资源
      最近更新 更多