Вы также можете иметь мастер/общая проверка макета для конкретного ViewData | | Значение ViewBag.
@if(ViewData["_ContextMenuList_"] is List<ContextMenuItem>) {
/// render the rest of the menu directly or in a strongly typed partial view.
}
Я хотел бы использовать список объектов, которые имеют текст меню, действие, контроллер htmlClass и некоторые значения маршрута.
public class ContexMenuItem
{
public string MenuText { get; set; }
public string Action { get; set; }
public string Controller { get; set; }
public object RouteValues { get; set; }
public object HtmlValues { get; set; }
}
Затем установите это значение только в действиях контроллера, где это имеет смысл, а также заполнить его соответствующими контекстуальными данными.
// Inside some controller action.
//asuming some how you already got your client's info.
var contextMenu = new List<ContexMenuItem>();
contextMenu.Add(new ContexMenuItem()
{
MenuText = "View More " + client.Name + "'s Info",
Action = "ViewMore",
Controller = "Clients",
HtmlValues = null,
RouteValues = new { id = client.ID }
});
contextMenu.Add(new ContexMenuItem()
{
MenuText = "Send a message to " + client.Name ,
Action = "SendMessage",
Controller = "Inbox",
HtmlValues = null,
RouteValues = new { id = client.ID }
});
ViewData["_ContextMenuList_"] = contextMenu;
Возможно, это утомительно, поскольку вы должны делать это во всех соответствующих действиях на данном контроллере. если это тот рефакторинг, который кодирует в частную функцию внутри контроллера и вызывает его, когда он применяется.
Некоторые люди могут утверждать, что эти данные всегда должны быть в классе модели, в этом случае я считаю это контекстуальными данными и не обязательно частью модели под рукой. Это также упрощает кодирование, просто поместив код визуализации в мастер-класс, который не знает модель. Это очень похоже на _LogOnPartial.cshtml, который находится на некоторых шаблонах MVC.
Разве это не похоже на то, что я сейчас делаю?Весь смысл для меня состоит в том, чтобы один общий файл макета поддерживал и мог отображать его, когда я хочу, на основе того, какой вид в настоящее время отображается. –
Я обновил свой ответ. – haim770
Спасибо! Вы считаете, что последний подход, который вы добавили в отредактированном сообщении, является плохой практикой, и если да, то почему? :) –