ASP.NET MVC 3 Custom Action Filter - Как добавить входящую модель в TempData? - PullRequest
3 голосов
/ 11 апреля 2011

Я пытаюсь создать фильтр настраиваемых действий, который извлекает входящую модель из контекста фильтра, добавляет ее в 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 Ответ

5 голосов
/ 11 апреля 2011

Понял - надеюсь, это правильный способ сделать это:

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);
   }
}
...