8

我想在我的助手中访问TempData以获取Flash 消息(如在 ruby​​ 中)

我得到一个运行时错误

The name 'TempData' does not exist in the current context

我的 Flash.cshtml 如下

@helper Show() 
{
    var message = "test message";
    var className = "info";

    if (TempData["info"] != null)
    {
        message = TempData["info"].ToString();
        className = "info";
    }
    else if (TempData["warning"] != null)
    {
        message = TempData["warning"].ToString();
        className = "warning";
    }
    else if (TempData["error"] != null)
    {
        message = TempData["error"].ToString();
        className = "error";
    } 

    <script>
        $(document).ready(function () {
            $('#flash').html('@HttpUtility.HtmlEncode(message)');
            $('#flash').toggleClass('@className');
            $('#flash').slideDown('slow');
            $('#flash').click(function () { $('#flash').toggle('highlight') });
        });
    </script>
}

在我的布局中

<section id="main">
    @Flash.Show() 
    <div id="flash" style="display: none"></div>
    @RenderBody()
</section>
4

4 回答 4

13

TempData 属于ControllerBase作为控制器基类的类,它不能被没有控制器的共享视图访问,

一种可能的解决方法是将控制器传递给您的帮助方法或通过 HtmlHelper 访问它。

@helper SomeHelper(HtmlHelper helper)
{
  helper.ViewContext.Controller.TempData
}
于 2012-01-06T18:43:54.397 回答
4

只需将TempData传递给您的助手。

在您的布局中对助手的调用将如下所示。

@Flash.Show(TempData)

您的 Flash.cshtml 助手将如下所示。

@helper Show(System.Web.Mvc.TempDataDictionary tempData)
{
    // The contents are identical to the OP's code,
    // except change all instances of TempData to tempData.
}
于 2014-06-26T16:38:23.290 回答
0

看起来您正在使用TempData您真正想要使用的地方ViewBagor ViewData["key"]

控制器

ViewBag.info=someString;
return View(model);

看法

if (ViewBag.info != null)
{
    message = ViewBag.info;
    className = "info";
}

查看这篇文章:http ://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx

于 2012-01-06T18:41:54.973 回答
0

有些人还使用 TempData 来帮助数据在重定向中存活。如果是这种情况,您可以通过首先将数据分配给 TempData 来解决您的问题:

TempData["myStuff"] = myData;

然后在您的新重定向操作中:

ViewBag["myBaggedStuff"] = TempData["myStuff"];

然后在您的共享视图中使用 ViewBag。

于 2013-12-20T16:22:47.100 回答