gpt4 book ai didi

asp.net-mvc - 底层 View 设置后如何访问 ViewBag.Title?

转载 作者:行者123 更新时间:2023-12-04 18:33:19 27 4
gpt4 key购买 nike

事情是这样的。我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com