6

マスターページに保持している mvc ユーザーコントロールの asp.net mvc マスターページに ViewData を渡そうとしています。たとえば、名前のドロップダウンリストを mvc ユーザーコントロールとして作成し、それをマスターページに配置しました。

私が直面している問題は、ViewData をマスターページに渡すことです。まともな解決策があるマイクロソフトのこの記事を見つけましたが、他に「より良い」解決策があるかどうか疑問に思っていました。リンクのソリューションで気に入らない点は、新しいコントローラー クラスから継承するようにすべてのコントローラーを変更する必要があることです。

http://www.asp.net/learn/MVC/tutorial-13-cs.aspx

編集:私が見ている問題は、ViewData に依存するマスターページにユーザーコントロールを配置する場合、そのマスターページを使用するすべての単一ページにその ViewData を繰り返し含める必要があるという事実です上記のリンクの解決策が最善の解決策である可能性がありますが、他の選択肢があることを望んでいました.

4

6 に答える 6

4

マスターページはすでにViewDataにアクセスできます。強く型付けされたアクセスが必要な場合は、次の2つのことを行う必要があります。

  1. マスターページのものを基本クラスに配置します(例:CommonViewData)
  2. マスターページは汎用のViewMasterPage<>クラスから継承していますか?

    "%>
于 2009-03-31T08:04:58.600 に答える
2

OnActionExecutingベース コントローラー クラスでメソッドを使用して、そこにビュー データを入力することはできますか?

何かのようなもの:

protected override void OnActionExecuting(ActionExecutingContext context)
{
  context.Controller.ViewData.Model = GetDataForControl();
}

試していないのであくまで想像ですが…

于 2009-06-09T19:51:49.030 に答える
1

私は通常、MasterPage に抽象コントローラー クラスを使用します。MasterPage は「抽象ビュー」に似ているため、これが最適なソリューションです。しかし、MasgerPageController の View() メソッドをオーバーライドしてビューデータを含めます。

protected override ViewResult View(string viewName, string masterName, object model)
{
    this.ViewData["menu"] = this.PagesRepository.GetPublishPages();
    return base.View(viewName, masterName, model);
}
于 2009-10-20T01:25:01.830 に答える
0

提案された解決策は機能すると思いますが、理想的な解決策ではありません。コードをBaseControllerコンストラクターに入れると、MasterPagesを持たないActionメソッド(PostメソッドやAjaxメソッドなど)でも呼び出されます。
より良い解決策(理想的ではない)は、マスターページでHtml.Actionメソッドを呼び出すことだと思います。

于 2010-02-14T16:20:25.600 に答える
0

私はあなたの問題をよく理解していません...

私が見ている問題は、ViewData に依存するマスターページにユーザー コントロールを配置する場合、そのマスターページを使用するすべてのページにその ViewData を繰り返し含める必要があるという事実です。

そうですね...もちろんそうです。マスターページにユーザーコントロールがある場合、もちろん、そのマスターページを使用するすべてのアクションとビューに対して、そのユーザーコントロールに必要なデータを渡す必要があります。

ベースコントローラーから継承するだけなら、同じことを繰り返す必要はありません。

あなたの問題は、一部のコントローラーが、その特定のマスターページから派生したビューを呼び出すアクションと呼び出さないアクションの両方を持っているという事実ですか? したがって、ベースコントローラーを実装している場合、その特定のマスターページを使用しないアクションには、そのためのビューデータがまだあります...? (すべてが理にかなっていれば;-)

于 2009-03-31T21:51:00.923 に答える