事情是这样的。我有一个 MVC 操作,在该操作上,我应用了自定义 ActionFilterAttribute 来使反序列化工作。现在,我想要做的是根据在此 View 中设置的 ViewBag.Title 设置一些标题。
我尝试将 ViewResult 包装在我自己的中,并覆盖 ExecuteResult 但 ViewBag 始终为空 :-(。
这甚至是可能的还是 MVC 引擎在 _layout 执行后重置 ViewBag?
更新:
让我发布一些代码示例,以更清楚地说明我想要做什么。我有一个电子邮件服务,我在其中从 MVC View 呈现正文。所以我的观点是这样的:
@{ViewBag.Title = "EventCreated";}
Something that ressembles an email message here.
现在我有一个 Controller ,它的 Action 看起来像这样:
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 东西远离我的观点,但让它相当干净。你怎么认为?
谢谢,
安泽
最佳答案
试试这个 - 分配 View 结果的输出
var 输出 = View (消息);
//在这里做你的其他viewbag的东西
返回输出;
为什么所有这一切 - 当你说“我希望能够让 View 认为它正在处理普通网页时,我没有遵循。”
编辑 :
那么为什么不通过 View 中的辅助方法设置它呢?
翼
@{
SetTitle("首页");
}
和
@职能 {
public void SetTitle(字符串标题)
{
ViewBag.Title = 标题;
Response.Headers.Add("title", title);
}
}
关于asp.net-mvc - 底层 View 设置后如何访问 ViewBag.Title?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216600/