2009-11-09 21 views
6

私はASP.NET MVC 1.0の初心者です。私はVS2008 .NET3.5で構築された古典的なアプリケーションから変換しています。マスターページを作成しました。メニューはデータベースから読み込む必要があります。従来のASP.NET3.5 VS2008の適切なメニューdivにHTMLを生成するコードは、マスターページのコードの背後にありました。ASP.NET MVC - マスターページの背後にあるコード

マスターページのコードがASP.NET MVC 1.0のどこにあるのか分かりません。

誰かに例がありますか?

おかげ

答えて

3

あなたのマスターページが表示され、ビューは受動的でなければなりません。言い換えれば、彼らは自分自身を見上げるべきではありません。

モデルから必要なデータを取得するのは、はるかに正しいアプローチ(ASP.NET MVCのコンテキスト内)です。

this SO questionを参照してください。

+0

例がありますか? –

+0

私の答えを更新しました... –

+0

ViewModelオブジェクトで参照されている例は、少し質問が残念です。 –

7

MVCでは、コードビハインドクラスはなくなりました。あなたが欲しいのは、部分です。

あなたはそうのようにそれを使用したい:このメニューは、あなたのコントローラは常に最初のメニューデータを満たすカスタムコントローラクラスをサブクラス化することができますすべてのページであることを行っている場合

<% Html.RenderPartial("MainMenu.ascx", ViewData["Menu"]); %> 

。 MVCの継承階層をいじりはやり過ぎである場合

あなたもMenuControllerクラスを作成し、ビュー/マスターでRenderActionを使用することができます行う方法を示しASP.NET siteに大きなチュートリアルがあり

<% Html.RenderAction<MenuController>(x => x.MainMenu()); %> 
3

まさにこれ。

簡単に言うと、データをViewDataコレクションを通じてマスターページに渡します。 ViewDataにデータを取得するには、アプリケーションレベルのコントローラを作成します。ページコントローラは、ベースのMVCコントローラではなく、アプリケーションコントローラから継承します。

また、表示されているページに応じてマスターページ上で操作を行う必要がある場合は、このアプリケーションコントローラを使用してActionExecutingイベントを関連付けることができます。これは、現在処理中のページ要求のコンテキストに関する情報を提供します。

+0

これはすばらしいチュートリアルです。コントローラの拡張オプションについてはかなり説明しています。 –

6

必要に応じてコードを残すことができます。あなたの.master.csで次に

<%@ Master Language="C#" AutoEventWireup="true" 
Inherits="Site_Master" CodeFile="Site.Master.cs" %> 

:あなたの管理組織のビー玉ファイルプットでは個人的に

public partial class Site_Master : ViewMasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 
+2

あなたはしてはいけません。 –

+3

さて、彼は尋ねた - 私は答えた。それに加えて、あなたは決して法的な事件が起こる可能性があります。 –

+0

あなたのスタイルが好きです。 :) –

1

、私は強く型付けされたビューとのviewmodelsを使用して好みます。マスターページにデータが必要な場合は、そのためのViewModelを作成します。すべてのページのViewModelがこのベースViewModelから継承されていることを確認します。同様に、他のすべてのコントローラが継承するベースコントローラを作成します。アクションフィルターを使用すると、マスターViewModelが暗黙的に取り込まれるようにすることができます。例については、thisを参照してください。

関連する問題