ASP.NET MVC在Html.ValidationMessageFor中排除数据注释属性

时间:2013-05-16 16:35:12

标签: c# asp.net-mvc

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

国家,公司

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

我想我理解你的问题。一种可能的解决方案是使用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项目中,ViewModel的构造类似于Company实体:

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意味着可以添加更多视图呈现方向的注释,而不会使具有不必要标记的实体重载。

我希望这有帮助!

答案 1 :(得分:0)

就绪!

我删除了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