2011-06-15 4 views
0

私はMVCの[MetadataType(T)]属性を見たことがありますが、それはすべて上質で良いですが、それが配置されているクラスを自己参照するという顕著な影響があるかどうかは疑問でした。私はそれを使い、試してみました。それはすばらしく動作します。実際、あまりにも真実であることは良いことです。だから、私が基本的に知りたいのは...私は次のコードで何か危険なことをしていますか?ASP.NET MVCのMetadataTypeの自己参照は安全ですか?

[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; } 
} 

答えて

2

ポイントはありません。

[MetadataType]属性は、MVCがクラス自体の元のプロパティではなく、サロゲートクラスのプロパティから属性を読み取るように指示します。
元のクラスに属性を追加できない場合(たとえば、デザイナーによってクラスが自動的に生成された場合など)

この属性がないと、MVCはクラス自体の属性を読み取ります。

+0

次に、特定のシナリオでそれを回避する方法を教えてください。私はクラスからメタデータ属性を読み込もうとしていますが、そのインスタンスはありません。なぜ私はポイントがあったのかに関する関連情報を投稿しました。 – Ciel

+0

私は知らない... – SLaks

+0

あなたは大丈夫です。私の間違いは、同じ 'FormContext'と' MetadataType'属性を再利用していることでした。別のHtmlHelperを通して同じ 'FormContext'を再利用しないと、属性なしで正常に動作します。 – Ciel