Ответ 1
Да, это обычная практика.
return View("Menu");
Я установил меню-контроллер для управления ссылками верхнего меню, на основе которых используется другой контроллер. Каждый другой контроллер имеет отдельную вложенную главную страницу для каждого из своих представлений.
Итак, у меня есть меню-контроллер с несколькими методами, которые возвращают viewresults, по одному на каждый контроллер или "раздел" сайта. Поэтому в настоящее время каждый из этих методов имеет свой собственный вид для отображения меню. но каждое представление для отображения меню - это тот же код, единственное, что изменяется, - это логика в методах контроллера, основанная на том, какие ссылки для рендеринга.
Есть ли способ, чтобы все эти действия контроллера были нацелены на один и тот же вид? потому что представление для всех одинаково?
спасибо
Да, это обычная практика.
return View("Menu");
Создайте строго типизированное представление, которое принимает контейнер, определяющий содержимое вашего меню. Передайте это как параметр в свой оператор return.
var thisMenu = CreateMenuForThisRequest();
return View ("Menu", thisMenu);
это зависит от того, какую версию 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, но я не уверен.
Для моего меню я использую метод RenderAction Я также использую ActionOutputCacheAttribute от Стива Сандерсона http://blog.stevensanderson.com/2008/10/15/partial-output-caching-in-aspnet-mvc/
вы значительно увеличите время загрузки вашего сайта с помощью этого кеширования