这就是事情。我有一个MVC Action,在这个动作上,我已经应用了一个自定义ActionFilterAttribute来使反序列化工作。现在,我想要做的是根据在此视图中设置的ViewBag.Title设置一些标题。
我已尝试将ViewResult包装在我自己的中,并覆盖ExecuteResult,但ViewBag始终为空: - (。
这甚至是可能的吗?或者一旦_layout被执行,MVC引擎是否会重置ViewBag?
更新 让我发布一些代码示例,以便更清楚我想做什么。我有一个电子邮件服务,我从MVC视图渲染正文。所以我的观点如下:
@{ViewBag.Title = "EventCreated";}
Something that ressembles an email message here.
现在我有一个Controller,其动作看起来像这样:
public ActionResult HelloWorld(MailView<HelloWorldMessage> msg)
{
Response.Headers["subject"] = "Test subject";
return View(msg);
}
我想让Headers [“subject”]语句看起来像Response.Headers [“subject”] = ViewBag.Title;我希望能够让View认为它正在处理一个普通的网页。
我尝试使用ActionFilterAttribute并覆盖OnResultExecuted但无法使其工作。
一种可能的选择是在布局页面上设置它,并根据某些标准决定使用哪种布局。这样我仍然可以保持Reponse的东西远离我的观点,但使它相当干净。你觉得怎么样?
谢谢, ANZE
答案 0 :(得分:3)
试试这个 - 分配视图结果的输出
var output = View(msg); //do your other viewbag stuff here return output;
为什么所有这一切 - 当你说“并且我想能够让View认为它正在处理普通网页时我没有遵循。”
修改强>: 你为什么不在视图中通过帮助方法设置它? 翼
@{ SetTitle("Home Page"); }
和
@functions { public void SetTitle(string title) { ViewBag.Title = title; Response.Headers.Add("title", title); } }