Передача данных в частичное представление, которое используется во многих местах, может быть выполнена разными способами:
Создайте базовый класс модели для всех ваших моделей. В базовом классе определите свойство PartialModel, которое будет содержать модель для частичного просмотра (их может быть много, если использование имеет много частичных представлений). Теперь вы можете заполнить свойство PartialModel в действии контроллера, но чтобы сделать код более пригодным для повторного использования, вы можете создать собственный фильтр действий, который будет вставлять данные частичного представления сразу после выполнения метода действия (но до того, как модель будет передана в представление)
public class PartialViewModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
BaseViewModel model;
if (filterContext.Controller.ViewData.Model == null)
{
model = new BaseViewModel();
filterContext.Controller.ViewData.Model = model;
}
else
{
model = filterContext.Controller.ViewData.Model as BaseViewModel;
}
model.PartialModel = new PartialModel(...) // Partial model initialization
base.OnActionExecuted(filterContext);
}
}
Тогда вы можете использовать его как:
[PartialViewModel]
public ActionResult Index()
{
//...
}
Другой вариант: вы можете создать класс BaseController для всех ваших контроллеров и создать PartialModel при инициализации базового контроллера. Затем PartialModel можно сохранить в словаре ViewData []. Поскольку использование словаря ViewData в представлениях плохо, создайте метод расширения в HtmlHelper, например:
public static PartialModel GetPartialModel(this HtmlHelper helper)
{
return helper.viewContext.ViewData["PartialModel"] as PartialModel
}
Чтобы вы могли получить модель следующим образом:
<% Html.RenderPartial("MyPartial", Html.GetPartialModel()); %>