asp.net mvc Могу ли я иметь одно представление для нескольких методов действия?или мне нужно отдельное представление для каждого? - PullRequest
15 голосов
/ 18 февраля 2010

Я настроил контроллер меню для управления ссылками главного меню, в зависимости от того, какой другой контроллер используется. Каждый другой контроллер имеет отдельную вложенную главную страницу для каждого из своих представлений.

Итак, у меня есть меню-контроллер с несколькими методами, которые возвращают результаты просмотра, по одному на каждый контроллер или «раздел» сайта. Поэтому в настоящее время каждый из этих методов имеет свое представление для отображения меню. но каждое представление для отображения меню представляет собой один и тот же код, единственное, что изменяется, это логика в методах контроллера, основанная на том, какие ссылки отображать.

есть ли способ, чтобы все эти действия контроллера были направлены на одно и то же представление? раз вид у всех одинаковый?

спасибо

Ответы [ 4 ]

23 голосов
/ 18 февраля 2010

Да, это обычная практика.

return View("Menu");
3 голосов
/ 18 февраля 2010

Создайте строго типизированное представление, которое принимает контейнер, определяющий содержимое вашего меню. Передайте это как параметр в вашем операторе возврата.

 var thisMenu = CreateMenuForThisRequest();
 return View ("Menu", thisMenu);
2 голосов
/ 18 февраля 2010

это зависит от того, какую версию ASP MVC вы используете;с MVC 2 вы можете создать элемент управления ascx и использовать RenderAction

в своем представлении, вы поместите что-то вроде

Html.RenderAction("Menu", "Navigation");

и получите навигационный контроллер с действием действия меню


public class NavigationController : Controller
{
      [ChildActionOnly]
      public ActionResult Menu()
      {
        Menu model;//your menu
        return PartialView("YourMenuAscxControlName", model);
      }
}

Я думаю, что если вы используете MVC 1, у проекта MVC Future есть RenderAction, но я не уверен.

0 голосов
/ 18 февраля 2010

Для моего меню я использую метод RenderAction Я также использую ActionOutputCacheAttribute от Стива Сандерсона http://blog.stevensanderson.com/2008/10/15/partial-output-caching-in-aspnet-mvc/

с этим кэшированием вы значительно увеличите время загрузки вашего сайта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...