0

VS 2010 のデフォルト レイアウトに基づいて MVC3 アプリケーションを作成しましたが、これを下の画像のように変更しました

レイアウト1

サブメニュー領域は、_layout.cshtml で次のように定義されています。

    <div id="sidebar">
    <h3>Entities</h3>
    <p></p>
        <ul>
            @Html.Partial("_EntitiesMenu")
        </ul>        
    </div>
    <section id="main">
        @RenderBody()
    </section>

_EntitiesMenu には以下のエントリが含まれます

<li>@Html.ActionLink("Addresses", "Index", "Address")</li>      
<li>@Html.ActionLink("Applications", "Index", "Application")</li>       

次のように定義された単一の MapRoute があります。

routes.MapRoute("Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
     { controller = "Home", action = "Index", id = UrlParameter.Optional });

メニューから開始されたすべてのエンティティコントローラーは、コントローラーで標準で定義され、ビューでビューが定義されています。

私が必要とするのは、以下のようにレイアウトを使用するようにアプリを変更することです

レイアウト2

ユーザーが [エンティティ] をクリックすると、アプリは myapp/entities/ または myapp/entities/index に移動し、メインの作業領域に次のようなビューが開きます。

レイアウト3

次に、ユーザーが右のサブメニューをクリックすると、URL は myapp/entities/entity1/index、myapp/entities/entity1/edit/1 などのようになります (今とまったく同じですが、エンティティ ページの「下」です。
エンティティ コントローラーを次のように定義しました)。

public class EntitiesController : Controller
{
    public ActionResult Index()
    { return View();}
}

そして、それは次のように見えます

<div id="workarea">
    // here should became new Body region, to load all views called from the other controllers
    // something like @RenderBody(), but this don't works
</div>
<div id="sidebar">
<h3>Entities</h3>
<ul>
    @Html.Partial("_EntitiesMenu")
</ul>        
</div>

エンティティ コントローラーやビューを変更する必要はありません (または、必要に応じて最小限の変更を行う必要があります。それらは多数あるためです)。エンティティのスコープの下で、どうにかしてその領域を本体として割り当てることはできますか? そして、ユーザーがトップのホーム/バージョン情報をクリックすると、_layout.cshtml から EntitiesView が「アンロード」されますか?

私の質問が非常に明確かどうかはわかりませんが、誰かが私が求めていることを理解してくれることを願っています.

ありがとうございました

4

2 に答える 2

1

@RenderSectionについて話しているのですかhttp://blogs.msdn.com/b/marcinon/archive/2010/12/08/optional-razor-sections-with-default-content.aspx

于 2011-11-12T02:12:26.667 に答える
0

次のアプローチを使用して、必要なものに近いものを達成することができました。

  1. 以下のように_layoutを変更しました

    <section id="main">
        <div>
            @RenderBody()
        </div>
        <div>
            @RenderSection("EntityCRUD", false)
        </div>
    </section>
    
  2. エンティティのビューを次のように作成しました。

    @Html.Partial("_PanelEntitiesMenu")

  3. _PanelEntitiesMenu を次のように定義

    <div id="sidebar">
    <h3>Entities</h3>
    <p></p>
        <ul>
        @Html.Partial("_EntitiesMenu")
        </ul>        
    </div> 
    
  4. エンティティ ビュー (インデックス、編集/削除/詳細/作成) を囲む

    @section EntityCRUD
    {
    @Html.Partial("_PanelEntitiesMenu")
    //... original view code
    }
    
  5. 関連するすべてのビューを変更して、ビュー「本体」がセクションに含まれるようにしました。セクションの最初に、パネル メニューを部分ビューとしてロードします。

    @section EntityCRUD
    {
        @Html.Partial("_PanelEntitiesMenu")
        ....
    }
    

まさに私が望んでいたものではありませんが、それは私が今まで見つけた最高のものです.

于 2011-11-15T09:03:28.520 に答える