Asp.net mvc Могу ли я иметь один вид для нескольких методов действий для таргетинга? или мне нужно отдельное представление для каждого?

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

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

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

спасибо

Ответы

Ответ 1

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

return View("Menu");

Ответ 2

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

 var thisMenu = CreateMenuForThisRequest();
 return View ("Menu", thisMenu);

Ответ 3

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

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

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

и иметь навигационный контроллер с помощью меню actionresult


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

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

Ответ 4

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

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