【问题标题】:ASP.NET MVC Exclude Data Annotation Attribute in Html.ValidationMessageForASP.NET MVC 在 Html.ValidationMessageFor 中排除数据注释属性
【发布时间】:2013-05-18 05:09:17
【问题描述】:

我使用 EF-CF,并且有以下实体:

国家、公司

Companies 有一个名为 CountryId 的属性,具有 StringLength 属性以及最小和最大限制(最少 3 个字符,最多 3 个字符,国家/地区 ID 为 ISO-Alpha-3) .当用户需要创建公司时,我会显示一个包含所有可用国家/地区的 html 元素。这是完美的!

但是,当我对表单执行 jquery 验证器时,这会检查 3 个选定选项而不是长度选定选项值。

我需要国家模型中的 StringLengthAttribute,我无法删除它。

我希望在调用中“移除”或“隐藏”StringLengthAttribute:
@Html.ValidationMessageFor(model => model.CountryId)

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    我想我理解你的问题。一种可能的解决方案是使用 ViewModel 传递给视图,而不是直接使用 Company 实体。这将允许您在不更改实体模型的情况下添加或删除数据注释。然后将新 CompanyViewModel 中的数据映射到 Company 实体模型以保存到数据库中。

    例如,Company 实体可能看起来像这样:

    public class Company
    {
        public int Id { get; set; }
        [StringLength(25)]
        public string Name { get; set; }
        public int EmployeeAmount { get; set; }
        [StringLength(3, MinimumLength = 3)]
        public string CountryId {get; set; }
    }
    

    现在在 MVC 项目中,可以构造类似于 Company 实体的 ViewModel:

    public class CompanyViewModel
    {
        public int Id { get; set; }
        [StringLength(25, ErrorMessage="Company name needs to be 25 characters or less!")]
        public string Name { get; set; }
        public int EmployeeAmount { get; set; }
        public string CountryId { get; set; }
    }
    

    使用 ViewModel 意味着可以添加更多面向视图表示的注释,而无需使用不必要的标记重载实体。

    我希望这会有所帮助!

    【讨论】:

    • 谢谢克里斯!好主意。我找到了下一个解决方案。 link
    【解决方案2】:

    准备好了!

    我删除了 html 控件的规则。

    $("#@(Html.HtmlIdNameFor(model => model.CountryId))").rules("remove", "rangelength");

    “rangelength”是 StringLengthAttribute 的 jquery 验证规则。

    其中“Html.HtmlIdNameFor”是获取 ASP.NET MVC 生成的“Id”的助手。
    点评How to get the HTML id generated by asp.net MVC EditorFor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      相关资源
      最近更新 更多