ViewBag内容不适用于部分视图?

时间:2012-07-05 15:29:19

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

我有一个名为TopPanel的PartialView。此面板负责显示在我的应用程序的任何页面上生成的错误消息。为了处理这个问题,当页面上发生任何异常时,我让它在TopPanel控制器中调用“ErrorHandler”动作。 ErrorHandler使用错误消息更新ViewBag并调用Index操作,该操作只返回局部视图(现在,因为我正在测试。我将稍后调用主控制器索引操作来显示整个页面)。我的理解是调用Index操作将重新加载视图,我在TopPanels PartilaView上的ErrorDiv将能够在ViewBag中显示新的错误消息。但是,什么都没有显示出来,我不知道为什么。

下载一些代码 -

ErrorHandler操作 -

public ActionResult ErrorHandler(string message)
{
        ViewBag.ErrorMsg = message;
        return RedirectToAction("Index");
}

我已经在调试器中检查过,“message”确实有一个有效值。并且ViewBag.ErrorMsg也会填充。

TopPanel的索引操作 -

 public ActionResult Index()
 {           
        return PartialView();
 }

TopPanels PartialView包含此单独显示错误的内容 -

<div id="errorMsgBox">@ViewBag.ErrorMsg</div>

有谁可以指出问题是什么?

2 个答案:

答案 0 :(得分:2)

由于您正在进行重定向,因此您实际上将最终处于完全独立的请求/响应中,该请求/响应不了解以前的ViewBag属性值。

答案 1 :(得分:2)

RedirectToAction就像浏览器重定向。它实际上将重定向代码发送到浏览器,操作名称是要请求的新URL。因此,您实际上是向服务器发送新请求以获取新页面,该页面将具有自己的ViewBag。

您可能只想返回视图并指定PartialView名称,而不是RedirectToAction。