MVC3で特定の機能を達成する方法に関する提案

私はMVC3アプリケーションを持っています。これは、VS 2010のデフォルトのレイアウトに基づいています。これは、下の図のように変更されました。

Layout1

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

    <div id="sidebar">
    

Entities

    
    @Html.Partial("_EntitiesMenu")
        
    </div>
    
@RenderBody()
 

_EntitiesMenuには以下のようなエントリが含まれています

  • @Html.ActionLink("Addresses", "Index", "Address")
  •       
    
  • @Html.ActionLink("Applications", "Index", "Application")
  •        
    

    私は単一のMapRouteを

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

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

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

    Layout2

    ユーザーがエンティティをクリックすると、アプリケーションはmyapp/entities /またはmyapp/entities/indexに移動する必要があり、以下のようなメイン作業領域のビューが開きます

    Layout3

    ユーザーが右のサブメニューをクリックすると、urlはmyapp/entities/entity1/index、myapp/entities/entity1/edit/1などのようになります。 私はEntitiesコントローラを以下のように定義しました。

    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">
    

    Entities

    
    
      @Html.Partial("_EntitiesMenu")
            
    </div>
    

    エンティティのコントローラやビューを変更する必要はありません(必要があれば最小限の変更が必要です)。エンティティの範囲内で、どういうわけかその領域をメインボディとして割り当てることはできますか?ユーザーがtop Home/Aboutをクリックすると、_layout.cshtmlからEntitiesViewがアンロードされますか?

    私の質問が非常にはっきりしているかどうかは分かりませんが、誰かが私が何を理解してくれることを願っています

    ありがとうございました

    0
    追加された 編集された
    ビュー: 1

    2 答え

    1
    追加された
    @RenderSectionはメインビューでしか表示できないため、エンティティインデックスビューで表示したいと思っています。私は必要なものに近いものを得るためにそれを「ハック」することができましたが、すべてのビューを変更し、最初に@section {..}のビューコードを "ラップ"し、次にエンティティメニューをロードする必要がありました部分的に見る。多くのファイルを変更する必要があり、設計がきれいではないため、良い解決策ではありません。他のアイデア?
    追加された 著者 bzamfir,

    私は以下のアプローチを使って必要なものに近いものを達成するために(ある種の)管理しました:

    1. Changed the _layout as below

      <div> @RenderBody() </div> <div> @RenderSection("EntityCRUD", false) </div>
       
      
    2. Created the view for Entities as:

      @Html.Partial("_PanelEntitiesMenu")

    3. Defined _PanelEntitiesMenu as

      <div id="sidebar">
      

      Entities


        @Html.Partial("_EntitiesMenu")
              
      </div> 
      
    4. Enclosing the entities views (Index, Edit/Delete/Details/Create) in

      @section EntityCRUD
      {
      @Html.Partial("_PanelEntitiesMenu")
      //... original view code
      }
      
    5. Changed all involved views to have the view "body" included in section, and at the beginning of the section I load the panel menu as partial view

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

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

    0
    追加された