Archive for 2011年2月27日

指定された値に一致するルートがルート テーブルにありません。

2011年2月27日

 

Html.RenderAction で次のエラーになる場合、

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

指定された値に一致するルートがルート テーブルにありません。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.InvalidOperationException: 指定された値に一致するルートがルート テーブルにありません。

ソース エラー:

行 24:
行 25:
行 26: @{Html.RenderAction(“TestDB2”);}

———–

Global.asax.cs の中で、たとえば次のように UrlParmeter.Optional を指定していて、シグネチャーがあいまいになって、Route を特定できないとこのエラーになるようだ。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

    routes.MapRoute(
        “Default”, // ルート名
        “{controller}/{action}/{page}/”, // パラメーター付きの URL
        new
        {
            controller = “Home”,
            action = “Index”,
            page = UrlParameter.Optional
        });
}

———-

RouteValueDictionary での指定例。

@{Html.RenderAction(“Action”, new RouteValueDictionary() { { “page”, 1 }, { “param1”, 1 }});

広告

この C# 研究室 Blog を、ページ文字化けしてるわよ~って言われても・・・

2011年2月27日

これ、一応文字化けじゃないんです。

自分用の備忘録なので、いいんです。

Html.RenderAction と Html.Action

2011年2月27日

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”) ;}では、何も表示されない。