使用 viewbag 的 MVC 共享例程

MVC Shared Routine that uses viewbag

我有一个在多个视图中使用的辅助例程,它包含一些漂亮的 bootstrap 格式来显示消息。

@MyHelpers.StatusMessage(ViewBag.Status, ViewBag.StatusMessage)

为了让它工作,我必须短暂地使用 tempdata(在重定向的情况下),然后将值放回 viewbag 中。

像这样:

@{
    // View Init 

    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";

    // In case we are here due to a redirect... 
    if (!String.IsNullOrEmpty((string)TempData["Status"]))
    {
        ViewBag.Status = TempData["Status"];

    }
    if (!String.IsNullOrEmpty((string)TempData["StatusMessage"]))
    {
        ViewBag.StatusMessage = TempData["StatusMessage"];
    } 

}

我真的很希望这像我的帮手一样成为一个常见的例程,但我无法从那里访问 viewbag。

有什么地方可以放置共享代码并仍然访问 viewbag 吗?

我也愿意接受其他方法...我意识到我这样做可能会很困难...

谢谢。

解析:

不完美,但允许重用并节省几行代码。

@helper SetStatusInfoFromTempData(dynamic viewBag, string status, string statusMessage)    
{

        // In case we are here due to a redirect... 
    if (!String.IsNullOrEmpty(status))
    {
        viewBag.Status = status;

    }
    if (!String.IsNullOrEmpty(statusMessage))
    {
        viewBag.StatusMessage = statusMessage;
    }

}

ViewBag 是一个动态的,因此您可以将它添加到您的辅助方法中作为共享处理的参数:

public void MyHelperMethod(dynamic viewBag, Dictionary<string, string> tempData)
{
    // In case we are here due to a redirect... 
    if (!String.IsNullOrEmpty((string)tempData["Status"]))
    {
        viewBag.Status = tempData["Status"];
    }

    if (!String.IsNullOrEmpty((string)tempData["StatusMessage"]))
    {
        viewBag.StatusMessage = tempData["StatusMessage"];
    }         
}

P.S。我猜你的 TempData 数据类型是字典,请根据需要更正。