#c# #asp.net-mvc-3 #model-binding #tempdata #custom-action-filter
#c# #asp.net-mvc-3 #привязка к модели #tempdata #пользовательский фильтр действий
Вопрос:
Я пытаюсь создать пользовательский фильтр действий, который извлекает входящую модель из контекста фильтра, добавляет ее в tempdata, а затем выполняет «другие действия».
Мой метод действий выглядит следующим образом:
[HttpPost]
[MyCustomAttribute]
public ActionResult Create(MyViewModel model)
{
// snip for brevity...
}
Теперь, я хочу добавить model
в TempData
, после запуска привязки модели и преобразования коллекции значений формы в MyViewModel
.
Как мне это сделать?
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.Controller.ViewData.ModelState.IsValid)
return;
var model = filterContext.????; // how do i get the model-bounded object?
filterContext.TempData.Add(someKey, model);
}
Комментарии:
1. пожалуйста, имейте в виду, что Tempdata хранит данные в сеансе..
Ответ №1:
Понял — надеюсь, это правильный способ сделать это:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.Controller.ViewData.ModelState.IsValid)
return;
var model = filterContext.ActionParameters.SingleOrDefault(ap => ap.Key == "model").Value;
if (model != null)
{
// Found the model - add it to tempdata
filterContext.Controller.TempData.Add(TempDataKey, model);
}
}