2010-12-02 2 views
3

私の質問はViewModelまたはDomainオブジェクトの検証注釈はどこに配置しますか?私は注釈がそれに定義されている場合UserCreateViewModelにのみ に動作します私の検証(ModelState.IsValid)を意味し、私の作成コントローラからUserCreateViewModelを渡していたよう

です。しかし、それぞれのViewModelでDataAnnotationを定義することはできません。なぜなら、それは大変な作業になるからです。 代わりに私はそれをユーザードメインモデルに入れたいと思います。だから私はどのように私の注釈の仕事とマッパーとしてコントローラにコードを追加することなく修正するCreateメソッドを修正するか。

//私のコントローラを作成する方法

[HttpPost] 
public ActionResult Create(UserCreateViewModel user) 
{ 
    if (ModelState.IsValid) 
    { 
     var createUser = new User(); 
     Mapper.Map(user, createUser); 

     _repository.Add(createUser); 

     return RedirectToAction("Details", new { id = createUser.UserId }); 
    } 

    return View("Edit", user); 
} 

// UserCreateViewModel - >特定のビューモデルを作成します

public class UserCreateViewModel 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

//ユーザー - >ドメインオブジェクト

[MetadataType(typeof(User.UserValidation))] 
public partial class User 
{ 
    private class UserValidation 
    { 
     [Required(ErrorMessage = "UserName is required.")] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")] 
     [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")] 
     public string UserName { get; set; } 

     [Required(ErrorMessage = "Password is required.")] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")] 
     public string Password { get; set; } 
    } 
} 

答えて

1

検証する必要がありますこれはユーザーの入力として受け取るものなので、少なくともビュー・モデルに置きます。モデルの検証が関係している限り、それを追加することもできますが、ビュー・モデルをPOSTアクションに渡す限り(これは正確に行うべきことです)、モデルの検証は無視されます。もちろん、モデルはビューモデルを使用しない他のアプリケーションでも再利用される可能性があるため、モデルが有効であることが保証されているため、ここでは問題はありません。 ASP.NET MVCに関する限り、この手順は必要ありません。

関連する問題