2010-12-29 14 views
0

MVC2/.net 4.0を同時に習得しようとしています。私は「MVC 2 Web」プロジェクト(アカウントコントローラとホームコントローラはあなたのためにセットアップされています)から始めるときに、汎用テンプレートVSを使用しています。MVC実行順

私の質問は、ビューは強くモデルに再度型付けされているということです。モデルは次のようになります。

[HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email); 

      if (createStatus == MembershipCreateStatus.Success) 
      { 
       FormsService.SignIn(model.UserName, false /* createPersistentCookie */); 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 
     return View(model); 
    } 

ので、質問のカップルを:

[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")] 
public class RegisterModel { 
    [Required] 
    [DisplayName("User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    [DisplayName("Email address")] 
    public string Email { get; set; } 

    [Required] 
    [ValidatePasswordLength] 
    [DataType(DataType.Password)] 
    [DisplayName("Password")] 
    public string Password { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [DisplayName("Confirm password")] 
    public string ConfirmPassword { get; set; } 

    [Required] 
    [DisplayName("School")] 
    public string School { get; set; } 

} 

その後、私は私のWebページ上の「登録」と、それは私のコントローラから以下を実行押してくださいね。

1)メソッド名の上にあるクラスは、最初に実行されます(ここではどの用語を使うのかわかりません)?たとえば、モデルのプロパティの上に[ValidatePasswordLength]があります。これは、パスワードを送信すると、dosnt検証、それはコントローラを打つdosnt意味ですか?このロジックをコントローラに入れることはできますか?

2)ModelStateはどこから来ていますか?

MVCですべてがどのように接続されているかをフローチャートで知りたいだけです。それは大きな円のように思え、出発点はありません。

答えて

0

属性はチェックされたほどには実行されません。

モデルバインディング時に、モデルバインダーは属性のスキャンを行い、モデルバインダーはこれらの属性のリストを取得し、その動作を変更することができます(たとえば、モデルバインダーが特定のプロパティーを試して、クラス(たとえば、検証属性)を呼び出すことができます。

は、特にご質問にお答えするには:

1)検証は2つの場所で発生する可能性があり、どちらかのアクションが呼び出される前に、つまりあなたがTryValidateModelを呼び出すときに、あなたのアクションがアクションで明示的にビューモデルを取るとき、または。どちらの方法でもアクションが呼び出されますが、上記のアクションで行ったように、アクション内で妥当性をチェックし、それに応じてレスポンスを処理するのはあなた次第です。

2)ModelStateはModelBinderから提供されます。

MVCの仕組みを見る最も簡単な方法は、ソースをダウンロードし、デバッグしてリクエストをステップ実行することです。