Предложения о том, как выполнить определенные функции в MVC3 - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть приложение MVC3, основанное на макете по умолчанию из VS 2010, которое я изменил, чтобы выглядеть как на изображении ниже

Layout1

Область подменю определена в _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 });

Все мои контроллеры сущностей, запущенные из меню, определены стандартно в Контроллерах и представлениях в Представлениях.

Мне нужно изменить приложение на использование макета, как показано ниже

Layout2

Когда пользователи нажимают Entities, приложение должно перейти к myapp / entity / или myapp / entity / index, и оно должно открыть представление в основной рабочей области, которое будет выглядеть ниже

Layout3

Затем, когда пользователи нажимают на правые подменю, URL-адрес должен выглядеть как myapp / entity / entity1 / index, myapp / entity / 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">
<h3>Entities</h3>
<ul>
    @Html.Partial("_EntitiesMenu")
</ul>        
</div>

Я не хочу вносить изменения в контроллеры или представления сущностей (или минимальные изменения, если это абсолютно необходимо, потому что их много). Могу ли я как-то назначить эту область в качестве основного тела, находясь в области действия сущностей? И если пользователь нажмет на верхнюю часть Home / About, он "выгрузит" EntitiesView из _layout.cshtml?

Не уверен, что мой вопрос очень ясен, но я надеюсь, что кто-то поймет, что я преследую.

Спасибо

Ответы [ 2 ]

1 голос
/ 12 ноября 2011
0 голосов
/ 15 ноября 2011

Мне удалось (что-то вроде) достичь чего-то близкого к тому, что мне нужно, используя следующий подход:

  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")
        ....
    }
    

Не совсем то, что я хотел, но это лучшее, что я нашел до сих пор.

...