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; 我希望能够让 View 认为它正在处理一个普通的网页。

我尝试使用 ActionFilterAttribute 并覆盖 OnResultExecuted 但无法使其正常工作。

一种可能的选择是在布局页面上设置它,并根据某些标准实际决定使用哪种布局。这样我仍然可以让 Reponse 远离我的观点,但让它相当干净。你怎么看?

谢谢, 安泽

4

1 回答 1

3

试试这个 - 分配视图结果的输出

变种输出=视图(味精);
//在这里做你的其他viewbag的东西
返回输出;

为什么这一切 - 当你说“我希望能够让 View 认为它正在处理一个正常的网页”时,我没有遵循。

编辑:你为什么不通过你的视图中的辅助方法来设置它?翼

@{
   SetTitle("主页");
}


@功能 {
    公共无效SetTitle(字符串标题)
    {
        ViewBag.Title = 标题;
        Response.Headers.Add("title", title);
    }

}

于 2011-06-02T20:45:11.370 回答