2009-05-12 20 views
0

asp.net mvcのbind属性に関する問題が発生しています。汎用型モデルのバインドとBindAttribute

public interface IUserView<TUser> where TUser : User 
{ 
    TUser User { get; set; } 
    string Email { get; set; } 
    string ConfirmEmail { get; set; } 
    string Password { get; set; } 
    string ConfirmPassword { get; set; } 
} 
public class EditUserView<TUser> : IUserView<TUser> where TUser : User 
{ 
    public virtual TUser User { get; set; } 

    [ValidateRegExp(RegexConstants.Email, "Invalid Email.")] 
    [ValidateNonEmpty("email is required.")] 
    public virtual string Email { get; set; } 

    [ValidateSameAs("Email", "confirmation email does not match.")] 
    public virtual string ConfirmEmail { get; set; } 


    public virtual string Password { get; set; } 

    [ValidateSameAs("Password", "confirmation password does not match.")] 
    public virtual string ConfirmPassword { get; set; } 
} 

とこのようになり、これを提出する方法:

public ActionResult SubmitProfile([Bind(Exclude="IsSystemAdmin")]EditUserView<Admin> iuserview) 

あなたは上記の方法を見ればあなたとbind属性に気づくでしょう、私はこのようになりますカスタムのViewModelを持っています'Exclude = "IsSystemAdmin"'。管理モデルには、 "IsSystemAdmin"という名前のブール型プロパティがあり、そのパーミッションレベルが上がります。明らかに、私は管理者がこのフィールドの真の値をポストバックするだけで自分自身をシステム管理者にすることはできません。

"IsSystemAdmin"と "User.IsSystemAdmin"の両方をexcludeプロパティで試してみましたが、いずれもIsSystemAdmin変数の更新を停止しませんでした。このシナリオでバインド属性を動作させる方法はありますか、これはDefaultモデルバインダーのバグですか?

答えて

1

は、あなた自身が

[Bind(Exclude = "IsSysAdmin")] 
public class TUser 
{ 

} 

TUSERクラスにバインド属性を使用してみました私はこのために財産の重要性あなたがこのモデルバインダー、したがって、上のバインドによって設定されたくないことを考えますクラスは大丈夫です。ほとんどの場合、アクションのフラグを明示的に設定することによって、管理者をsysadminに増やす可能性があります。

私はフォームの投稿から直接Modelクラスをバインドすることに非常に慎重です。私は、別のサービス層を介してのみリポジトリ層のバインドおよび更新モデルクラス用の特定のフォームクラスを持っています。