4

つまりね。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

4

1 に答える 1

3

これを試してください-ビュー結果の出力を割り当てます

var output = View(msg);
//ここで他のビューバッグの処理を行います
出力を返します。

しかし、なぜこれがすべてなのか-「そして、Viewに通常のWebページを処理していると思わせることができるようにしたい」と言ったとき、私は従いませんでした。

編集:ビューのヘルパーメソッドを使用してこれを設定してみませんか?アラ

@ {
   SetTitle( "ホームページ");
}


@関数 {
    public void SetTitle(string title)
    {{
        ViewBag.Title=タイトル;
        Response.Headers.Add( "title"、title);
    }

}

于 2011-06-02T20:45:11.370 に答える