Вы можете написать новый ActionFilter, которым вы можете украсить метод действия;этот фильтр действий загрузит справочные данные в данные представления, к которым вы можете получить доступ из своего представления.
Подробнее о фильтрах действий здесь .
РЕДАКТИРОВАТЬ: На основе комментариев пользователей теперь включается строго типизированный параметр.
Во-первых, вам нужно создать SharedViewModel для хранения общих данных.
public class SharedViewModel
{
public List<string> Days { get; set; }
public List<string> Months { get; set; }
public List<string> Years { get; set; }
}
Далее мы создадим представлениемодель, которая будет использоваться представлением Index, которое использует эту модель общего представления.
public class HomeViewModel
{
public string ViewName { get; set; }
public SharedViewModel SharedViewModel { get; set; }
}
Важным является следующий шаг, он реализует фильтр действий SharedData (), который будет применять общие данные.
public class SharedDataActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var currentModel = ((HomeViewModel) filterContext.Controller.ViewData.Model);
currentModel.SharedViewModel = new SharedViewModel
{
Days = new List<string> {"Mon"},
Months = new List<string> {"Jan"},
Years = new List<string> {"2011"}
};
base.OnActionExecuted(filterContext);
}
}
В данный момент он просто применяет все общие данные, но вы можете добавить параметры в метод для выбора.
Когда действие выполнено, этот метод принимает текущую модельи добавляет общие данные.
Вот действие контроллера.
[SharedDataActionFilter]
public ActionResult Index()
{
return View("Index", new HomeViewModel { ViewName = "HomePage" });
}
Вы можете получить доступ к данным, как любое другое строго типизированное представление, и общие данные не будут влиять наданные уже в модели (в данном случае «ViewName»).Вы также можете использовать фильтры действий на контроллерах и по всему сайту с помощью mvc 3.
Надеюсь, это поможет, Мэтт.