我使用EF-CF,并拥有以下实体:
国家,公司
公司有一个名为CountryId的属性,具有StringLength属性以及最小和最大限制(最少3个字符,最多3个字符,国家/地区ID ISO-Alpha-3 ) 。当用户需要创建公司时,我会显示包含所有可用国家/地区的html元素。这很完美!
但是,当我对表单执行jquery验证器时,这将检查3个选定的选项而不是选择的长度选项值。
我需要国家模型中的StringLengthAttribute,我无法删除它。
我希望在调用中“删除”或“隐藏”StringLengthAttribute:
@ Html.ValidationMessageFor(model => model.CountryId)
谢谢!
答案 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