在Helper中使用TempData错误:当前上下文中不存在名称"TempData"

eiu*_*165 8 asp.net-mvc html-helper view-helpers asp.net-mvc-3

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

我得到一个运行时错误

The name 'TempData' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)

我的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>
}
Run Code Online (Sandbox Code Playgroud)

在布局中我有

<section id="main">
    @Flash.Show() 
    <div id="flash" style="display: none"></div>
    @RenderBody()
</section>
Run Code Online (Sandbox Code Playgroud)

Jah*_*ine 13

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

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

@helper SomeHelper(HtmlHelper helper)
{
  helper.ViewContext.Controller.TempData
}
Run Code Online (Sandbox Code Playgroud)