新たなヘルパーメソッド
前編では、新たに追加された強い型付けのヘルパーメソッドを紹介しました。しかし、それ以外でも重要なヘルパーメソッドが追加されています。今回はActionヘルパーメソッドとRenderActionヘルパーメソッドについて紹介します。
HTML.Actionヘルパーメソッドと、HTML.RenderActionヘルパーメソッド
ActionヘルパーメソッドとRenderActionヘルパーメソッドは、部分的に特定のアクションメソッドを呼び出し、部分ビューを描画するヘルパーメソッドです。また、それぞれ異なるコントローラーからアクションメソッドを呼び出して利用できます。
構文の記載例を見てみましょう。最初にActionヘルパーメソッドです。
<%--上構文例--%> <%--下記述例--%> <%--異なるコントローラーへのアクションメソッドを利用する例--%> <%: Html.Action("アクションメソッド名","コントローラー名") %> <%: Html.Action("PartialAction","Home") %>
第一パラメタのアクションメソッド名は必須ですが、コントローラーは省略可能です。Actionヘルパーメソッドでは、通常のヘルパーメソッド同様の記載をします(<%: Html.Action() %>)。これは、アクションメソッドの戻り値を文字列をViewの一部にMvcHtmlString(HTMLエンコードされた文字列)型で埋め込み描画するからです。
続いて、RenderActionヘルパーメソッドの構文例を見てみましょう。
<%--上構文例--%> <%--下記述例--%> <%--異なるコントローラーへのアクションメソッドを利用する例--%> <% Html.RenderAction("アクションメソッド名","コントローラー名"); %> <% Html.RenderAction("PartialAction","Home"); %>
パラメタの設定はActionメソッドと同様です。また、Actionヘルパーメソッドと記載が異なることにお気づきでしょうか? <% Html.RenderAction(); %>で記載している理由は、現在のレスポンスストリームに戻り値を書き出すためです。
このナゲット部分以外は、Actionヘルパーメソッドと記述に違いはありません。
コントローラー側のアクションメソッドの記述例は、Actionヘルパーメソッド、RenderActionヘルパーメソッド共に通常のアクションメソッドと変わりありません。
// パラメタ指定時 public ActionResult PartialAction() { PartialView("PicRA"); }
Actionヘルパーメソッド、RenderActionヘルパーメソッド共に戻り値を書き出します。PicRA.ascxの部分ビューは、<img>タグのみ記載しています。実行結果は図3のとおりです。
RenderActionヘルパーメソッドとRenderPartialヘルパーメソッドの違い
RenderActionヘルパーメソッドとRenderPartialヘルパーメソッドはどちらも部分的な描画を行いますが、利用するシナリオが異なります。RenderActionヘルパーメソッドはアクションメソッドを介し、その結果をビューにレンダリングします(主にHTML文字列など)。RenderPartialヘルパーメソッドはアクションメソッドの処理の結果として直接パーシャルビュー(.ascx)を表示します。
Action・RenderActionヘルパーメソッドとRenderPartialヘルパーメソッドのポイントをまとめると次のとおりです。
特徴 | Actionヘルパーメソッド | RenderActionヘルパーメソッド | RenderPartialヘルパーメソッド |
異なるコントローラーからも利用できる共通化したアクションメソッドを記述できる | ○ | ○ | × |
文字列をViewの一部に埋め込み結果を文字列として返す | ○ | × | × |
現在のレスポンスストリームに戻り値を書き出す | × | ○ | ○ |
アクションメソッドを介する | ○ | ○ | × |
アクションメソッドの処理の結果を直接表示する | × | × | ○ |
それぞれ機能的に異なる部分があることがお分かりいただけたかと思います。ある程度のシナリオで利用する可能性があるメソッドなので、押さえておきましょう。