Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在ASP.NET MVC中自引用元数据类型安全吗?_Asp.net Mvc 3_Metadata - Fatal编程技术网

Asp.net mvc 3 在ASP.NET 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

我已经看到了MVC的
[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
,那么它在没有该属性的情况下也可以正常工作。