つまりね。MVCアクションがあり、そのアクションで、カスタムActionFilterAttributeを適用して、逆シリアル化を機能させました。ここで、私がやりたいのは、このビュー内に設定されているViewBag.Titleに基づいてヘッダーを設定することです。
ViewResultを自分でラップし、ExecuteResultをオーバーライドしようとしましたが、ViewBagは常に空です:-(。
これも可能ですか、それとも_layoutが実行されるとMVCエンジンがViewBagをリセットしますか?
更新: 私がやりたいことを明確にするために、いくつかのコードサンプルを投稿させてください。私はメールサービスを持っており、MVCビューから本文をレンダリングします。したがって、私の見解は次のようになります。
@{ViewBag.Title = "EventCreated";}
Something that ressembles an email message here.
これで、次のようなアクションを持つコントローラーができました。
public ActionResult HelloWorld(MailView<HelloWorldMessage> msg)
{
Response.Headers["subject"] = "Test subject";
return View(msg);
}
そのHeaders["subject"]ステートメントをResponse.Headers["subject"]=ViewBag.Title;のようにしたいと思います。そして、ビューが通常のWebページを処理していると思わせることができるようにしたいと思います。
ActionFilterAttributeを使用してOnResultExecutedをオーバーライドしようとしましたが、機能させることができませんでした。
考えられるオプションの1つは、レイアウトページで設定し、特定の基準に基づいて実際に使用するレイアウトを決定することです。そうすれば、Reponseを自分のビューから遠ざけることができますが、かなりクリーンにすることができます。どう思いますか?
ありがとう、Anže