Я часто использую ViewData, когда мне нужно добавить данные в текущий запрос с помощью какого-либо базового контроллера или фильтра. Как правило, главные страницы будут иметь динамическое содержимое, которое должно быть получено с сервера, и вместо того, чтобы изменять модель, возвращаемую представлением, или упаковывать каждую модель, возвращенную в родительскую ViewModel, я могу просто поместить дополнительные данные в ViewData.
Чтобы не использовать строки в моих представлениях, я часто помещаю поле const в класс контроллера или аналогичный и вызываю поле в представлении.
public abstract partial class BaseController : Controller
{
public const string MessagesViewDataKey = "Base.Messages";
protected override void OnActionExecuted(ActionExecutedContext filterContext) {
if (filterContext != null && filterContext.Controller != null && !filterContext.IsChildAction) {
filterContext.Controller.ViewData[MessagesViewDataKey] = Messenger.MessageQueues;
}
base.OnActionExecuted(filterContext);
}
}
// site.master
<% if (ViewData[BaseController.MessagesViewDataKey] != null)
Html.RenderPartial("DisplayTemplates/MessageList", ViewData[BaseController.MessagesViewDataKey]); %>