ポストページ表示用Actionメソッド
まずは、Post用のページを表示するためのActionメソッドを定義する。(ここではMyPostとした)
ちなみに、ActionメソッドはActionと入力しTab,Tabでコードスニペットを使うのが良さそうだ。
- public ActionResult MyPost()
- {
- return View();
- }
次にこのメソッドの場所で右クリックして「ビューの追加」を選択。
ポストページ表示用ビューサンプル
MyPost.aspx
- <body>
- <div>
- <% using (Html.BeginForm())
- {%>
- <label>名前:</label>
- <%: Html.TextBox("name","<初期値>") %>
- <input type="submit" value="送信" />
- <% } %>
- </div>
- </body>
ここではまず、HtmlヘルパークラスのBeginFormメソッドを使ってFormタグを展開している。
その中に、ラベル、テキストボックス、ボタンを配置。
テキストボックスにはこれもまたHtmlヘルパークラスのTextBoxメソッドを使用した。
これで表示される画面とソースは以下の通り。
ヘルパークラスを使っても、それほど便利という感じでもないが、最近ではRazor記法とかが出てきているようなのでそちらを使ったほうが良いのだろう。
ちなみに、これも最近の機能っぽいが、<%: %> とするとHTMLエンコードまでやってくれるらしい。
なお、<% using (Html.BeginForm("MyPost", "HelloWorld", FormMethod.Post))とすることでactionとmethodを明示的に指定することも可能。
ポストされたデータを処理するアクションメソッド
基本的には入力画面を表示したアクションメソッドと同じメソッド名になるのだが、区別するためにこちらには[HttpPost]属性を付加する。(というかActionPostスニペットで展開させるとそうなる)
また、ポストされたデータを受け取るためにメソッドに引数を指定する。ここでは画面入力された「name」の値を取得するために(string name)としている。
入力値はRequestプロパティから参照できるHttpRequestオブジェクトからも取得できる(Request.Form(“name”))ので引数の指定は必須では無いようにも思うが、シグネチャが被るので1つは指定しないといけないだろう。
取得したポストデータは画面に渡すためにViewData["HelloName"]に入れておく。
このケースではアクションメソッドの名前と、結果を表示するためのビューの名前が異なるため、Viewメソッドにビューの名前を引数で与えている。
- [HttpPost]
- public ActionResult MyPost(string name)
- {
- ViewData["HelloName"] = "Hello " + name;
- return View("Result");
- }
結果を表示するビュー
上記で設定されたViewDataを取ってきてそのまま表示するだけだ。
- <body>
- <div>
- <%:ViewData["HelloName"]%>
- </div>
- </body>
0 件のコメント:
コメントを投稿