2

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

国家、公司

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

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

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

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

谢谢!

4

2 回答 2

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 意味着可以添加更多面向视图表示的注释,而无需使用不必要的标记重载实体。

我希望这有帮助!

于 2013-05-16T18:56:51.033 回答
0

准备好!

我删除了 html 控件的规则。

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

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

其中“Html.HtmlIdNameFor”是获取 ASP.NET MVC 生成的“Id”的助手。
查看如何获取asp.net MVC EditorFor生成的HTML id

于 2013-05-17T21:09:17.900 回答