ASP.NET MVC - My MVC Applicationを解析してみる (3)Register - プレゼンテーション層

LogOnページのRegisterリンクをクリックすると、
ユーザー登録を行うためのRegisterページが表示されます。
以下、このRegister.aspxの解析メモです。

◆Register.aspx


17: <% using (Html.BeginForm()) { %>
18: <div>
19: <fieldset>
20: <legend>Account Information
21: <p>
22: <label for="username">Username:
23: <%= Html.TextBox("username") %>
24: <%= Html.ValidationMessage("username") %>
25: </p>
26: <p>
27: <label for="email">Email:
28: <%= Html.TextBox("email") %>
29: <%= Html.ValidationMessage("email") %>
30: </p>
31: <p>
32: <label for="password">Password:
33: <%= Html.Password("password") %>
34: <%= Html.ValidationMessage("password") %>
35: </p>
36: <p>
37: <label for="confirmPassword">Confirm password:
38: <%= Html.Password("confirmPassword") %>
39: <%= Html.ValidationMessage("confirmPassword") %>
40: </p>
41: <p>
42: <input type="submit" value="Register" />
43: </p>
44: </fieldset>
45: </div>
46: <% } %>
42行目のRegisterボタンを押下すると、/Account/Registerアクションが実行されます。
以下、実行されるRegisterアクションのソースコード

◆AccountController.cs


91: [AcceptVerbs(HttpVerbs.Post)]
92: public actionresult register(string username, string email,
string password, string confirmPassword)
93: {
94:
95: ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
96:
97: if (ValidateRegistration(userName, email, password, confirmPassword))
98: {
99: // Attempt to register the user
100: MembershipCreateStatus createStatus =
MembershipService.CreateUser(userName, password, email);
101:
102: if (createStatus == MembershipCreateStatus.Success)
103: {
104: FormsAuth.SignIn(userName, false /* createPersistentCookie */);
105: return RedirectToAction("Index", "Home");
106: }
107: else
108: {
109: ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
110: }
111: }
112:
113: // If we got this far, something failed, redisplay form
114: return View();
115: }
91行目で[AcceptVerbs(HttpVerbs.Post)]属性をつけることで、Post時に呼び出される
アクションであることを定義します。
92行目では4つの引数(string userName, string email, string password, string confirmPassword)を
受け取っています。
ここで受け取る引数の値は、Register.aspxでHtmlヘルパーを使用して定義したテキストボックス
(23行,28行,33行,38行)で入力した値です。

aspx上で<%= Html.TextBox("username") %>と記述したテキストボックスの入力値が、
実行されるアクションの引数(string username)に自動的に渡されます。


今回のまとめ
1.ページのPost時に呼び出されるアクションには、[AcceptVerbs(HttpVerbs.Post)]属性をつける。
2.Htmlヘルパーを使用して定義したテキストボックスの入力値は、実行されるアクションが持つ
  同じ名前の引数に渡すことができる。