3

着信モデルをフィルターコンテキストから取得し、それをtempdataに追加してから、「その他の処理」を実行するカスタムアクションフィルターを構築しようとしています。

私のアクションメソッドは次のようになります。

[HttpPost]
[MyCustomAttribute]
public ActionResult Create(MyViewModel model)
{
   // snip for brevity...
}

ここで、モデルバインディングが開始され、フォーム値コレクションがに変換された、にを追加modelします。TempDataMyViewModel

それ、どうやったら出来るの?

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

1 に答える 1

5

了解しました-うまくいけば、これが正しい方法です:

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);
   }
}
于 2011-04-11T04:39:58.407 に答える