Asp.net mvc 3 在ASP.NET MVC中自引用元数据类型安全吗?
我已经看到了MVC的Asp.net mvc 3 在ASP.NET MVC中自引用元数据类型安全吗?,asp.net-mvc-3,metadata,Asp.net Mvc 3,Metadata,我已经看到了MVC的[MetadataType(T)]属性,这一切都很好,但我想知道自引用它所在的类是否会产生显著的影响。我用过,试过,效果非常好。事实上,好得难以置信。所以,我基本上想知道的是…我用下面的代码做了什么危险的事情吗 [MetadataType(typeof(RegisterViewModel))] public class RegisterViewModel : IMember { [Required] [DataType(DataType.EmailAddres
[MetadataType(T)]
属性,这一切都很好,但我想知道自引用它所在的类是否会产生显著的影响。我用过,试过,效果非常好。事实上,好得难以置信。所以,我基本上想知道的是…我用下面的代码做了什么危险的事情吗
[MetadataType(typeof(RegisterViewModel))]
public class RegisterViewModel : IMember {
[Required]
[DataType(DataType.EmailAddress)]
[RegularExpression(Text.RegularExpressions.Email, ErrorMessage = Text.ErrorMessages.Email)]
[Display(Name = "Email Address")]
[Rules("The name you'll login with. You can't use: <em>[ ] | ; , $ \\ < > \"</em>")]
public string Email { get; set; }
[Required(ErrorMessage = "You must enter a password.")]
[StringLength(32, MinimumLength = 6)]
[DataType(DataType.Password)]
[RegularExpression(Text.RegularExpressions.Password, ErrorMessage = Text.ErrorMessages.Password)]
[Display(Name = "Enter your password")]
[Rules("Passwords must be between 6 and 32 characters, may contain any alphanumeric character and the symbols <em>@ # $ %</em> only.")]
public string Password { get; set; }
[Required(ErrorMessage = "You must confirm your password.")]
[StringLength(32, MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Re-enter your password")]
[RegularExpression(Text.RegularExpressions.Password, ErrorMessage = Text.ErrorMessages.Password)]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
[MetadataType(typeof(RegisterViewModel))]
公共类RegisterViewModel:IMember{
[必需]
[数据类型(数据类型.电子邮件地址)]
[RegularExpression(Text.RegularExpressions.Email,ErrorMessage=Text.ErrorMessages.Email)]
[显示(Name=“电子邮件地址”)]
[规则(“您登录时使用的名称。您不能使用:[]|;,$\<>\”)]
公共字符串电子邮件{get;set;}
[必需(ErrorMessage=“您必须输入密码。”)]
[StringLength(32,最小长度=6)]
[数据类型(数据类型.密码)]
[RegularExpression(Text.RegularExpressions.Password,ErrorMessage=Text.ErrorMessages.Password)]
[显示(Name=“输入密码”)]
[规则(“密码必须介于6到32个字符之间,可以包含任何字母数字字符和符号@#$%”)。]
公共字符串密码{get;set;}
[必需(ErrorMessage=“您必须确认密码。”)]
[StringLength(32,最小长度=6)]
[数据类型(数据类型.密码)]
[显示(Name=“重新输入密码”)]
[RegularExpression(Text.RegularExpressions.Password,ErrorMessage=Text.ErrorMessages.Password)]
[比较(“密码”,ErrorMessage=“密码和确认密码不匹配。”)]
公共字符串ConfirmPassword{get;set;}
}
没有意义
[MetadataType]
属性告诉MVC从代理类的属性中读取属性,而不是从类本身的原始属性中读取属性。它适用于无法向原始类添加属性的情况(例如,如果类是由设计器自动生成的)
如果没有此属性,MVC将从您的类本身读取属性。然后,也许您可以告诉我如何在给定的场景中避免使用它。我正在尝试从类加载元数据属性,但没有它的实例。我已经用相关信息更新了我的帖子,说明了为什么会有这样的问题。不管怎样,您已经知道了是的。我的错误是我重新使用了相同的
FormContext
,而MetadataType
属性使这一点变得毫无意义。如果我不通过不同的HtmlHelper重新使用相同的FormContext
,那么它在没有该属性的情况下也可以正常工作。