1

私はフィルターを取得ViewBagしたいと思います。OnResultExecuted両方

((ViewResultBase)filterContext.Result).ViewBag.Get

filterContext.Controller.ViewBag.Get

ViewBagアクションで割り当てられたリターン。ViewBagしかし、「view.cshtml」で割り当てられたいです。
私が達成したいのは、ViewBagかみそりから.Titleを取得することです

@{
ViewBag.Title = "My Title";
}

そして、それを応答テキストの最後に JavaScript として書き込みます。これは@Ajax.ActionLink()状況で役立ちます。私のOnActionExecutedフィルターコードはそうでなければなりません:

string scriptText = "<script type='text/javascript'>document.title = '" + ViewBag.Title + "';</script>";
filterContext.HttpContext.Response.Write(scriptText);

どんな助けでも大歓迎です。

4

1 に答える 1

1

ビューからコントローラーに値を渡すことはできません。基本的にMVCパターンに反しています。ビューが実行されると、ViewData( ViewBag) の独自のコピーが取得されるため、それに対する変更はビューのスコープ内でのみ有効です。

Scott Guthrie のブログから:

ビューには、アプリケーション ロジックやデータベース取得コードを含めることはできません。代わりに、すべてのアプリケーション/データ ロジックはコントローラー クラスでのみ処理する必要があります。このパーティショニングの背後にある動機は、UI 生成コードからアプリケーション/データ ロジックを明確に分離することです。これにより、UI レンダリング ロジックから分離して、アプリケーション/データ ロジックの単体テストが容易になります。

ビューは、Controller クラスによって渡されたビュー固有のデータを使用して、出力のみをレンダリングする必要があります。ASP.NET MVC フレームワークでは、このビュー固有のデータを "ViewData" と呼びます。このブログ投稿の残りの部分では、この "ViewData" をコントローラーからビューに渡してレンダリングするために使用できるさまざまなアプローチのいくつかについて説明します。

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

説明付きの同様の質問もここにあります: Setting ViewData item in a Partial to be read in a View

あなたの質問にとても近いです。Title の値をアクション実行フィルターに渡すことはできず、コントローラーのスコープで解決する必要があります。

于 2012-11-15T10:28:01.500 に答える