Html.RenderAction と Html.Action


HomeController.cs に

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

を追加。

Views/Home に次のView (Test.cshtml)

@{
    ViewBag.Title = “Test”;
    Layout = “~/Views/Shared/_Layout.cshtml”;
}

<h2>Hello World by Render Action</h2>

This is Hello World by Test.cshtm

————

を追加。

Index.cshtmlに、次のように、RenderAction を追加

@{
    ViewBag.Title = “ホーム ページ”;
}

<h2>@ViewBag.Message</h2>
<p>
    ASP.NET MVC の詳細については、<a href=”http://asp.net/mvc” title=”ASP.NET MVC Website”>http://asp.net/mvc</a> を参照してください。
</p>

@{Html.RenderAction(“Test”);}

———————–

これで、部分に別のRenderAction のHtml を挿入できる。

image

しかし、@Html.RenderAction(“Test”) として、中括弧なしにすると、次のエラーが発生する。

‘/’ アプリケーションでサーバー エラーが発生しました。
——————————————————————————–

コンパイル エラー
説明: この要求を送信するために必要なリソースをコンパイル中に、エラーが発生しました。以下のエラーの詳細を確認して、ソース コードを修正してください。

コンパイル エラー メッセージ: CS1502: ‘System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)’ に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。

ソース エラー:

行 8:  </p>
行 9: 
行 10: @Html.RenderAction(“Test”)

これは、RenderAction が void 型であって、Render Stream に直接Htmlレスポンスを返すため。

一方、Html.Action(“Test”) は、指定された子アクション メソッドを呼び出し、結果を HTML 文字列として返します。(返り値はMvcHtmlString を直接返す。)、

@Html.Action(“Test”)

では、期待通りにTest アクションが表示されるが、逆に

@{Html.Action(“Test”) ;}では、何も表示されない。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。