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

标签 asp.net-mvc asp.net-mvc-3 viewbag

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

相关文章:

.net - Linq to SQL 或企业 ASP.NET MVC 应用程序架构的 Entity Framework ?

c# - 为什么扩展在@helper 中不可用?

c# - MVC-4 在服务器端更改 ViewBag.Message?

css - 使用 ViewBag for Navigation 在 <li> 中动态插入类,具有子级依赖性(MVC)

asp.net-mvc - NET Core 3.1 MVC 授权/身份验证,使用在单独的 Net Core 3.1 Web Api 中从外部获取的 token (JWT)

asp.net-mvc-3 - 如何从 ModelMetadata 检索 GroupName 数据注释

c# - MVC3 在 1 个 View 中显示来自 1 个以上实体的信息

Asp.Net VNext Windows 服务

c# - 我如何从 JS 访问 ViewBag

javascript - 需要学习高级 Javascript 概念的指导