ページ

2011年11月25日金曜日

◆ASP.NET MVC Postデータを取得する

 

ポストページ表示用Actionメソッド

まずは、Post用のページを表示するためのActionメソッドを定義する。(ここではMyPostとした)

ちなみに、ActionメソッドはActionと入力しTab,Tabでコードスニペットを使うのが良さそうだ。

        public ActionResult MyPost()
{
return View();
}

次にこのメソッドの場所で右クリックして「ビューの追加」を選択。
2011-11-25 15h13_39


ポストページ表示用ビューサンプル


MyPost.aspx


<body>
<div>
<% using (Html.BeginForm())
{%>
<label>名前:</label>
<%: Html.TextBox("name","<初期値>") %>
<input type="submit" value="送信" />
<% } %>

</div>
</body>

ここではまず、HtmlヘルパークラスのBeginFormメソッドを使ってFormタグを展開している。
その中に、ラベル、テキストボックス、ボタンを配置。
テキストボックスにはこれもまたHtmlヘルパークラスのTextBoxメソッドを使用した。
これで表示される画面とソースは以下の通り。
2011-11-25 16h39_42


2011-11-25 16h40_48


ヘルパークラスを使っても、それほど便利という感じでもないが、最近では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 件のコメント:

コメントを投稿

私が最近チェックした記事