我想在我的助手中访问 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>
答案 0 :(得分:13)
TempData属于ControllerBase
类,它是控制器的基类,共享视图无法访问,后面没有控制器,
一种可能的解决方法是将控制器传递给助手方法或通过HtmlHelper访问它。
@helper SomeHelper(HtmlHelper helper)
{
helper.ViewContext.Controller.TempData
}
答案 1 :(得分: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.
}
答案 2 :(得分:0)
您似乎正在使用TempData
,而您确实希望使用ViewBag
或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
答案 3 :(得分:0)
有些人还使用TempData来帮助数据在重定向中存活。如果是这种情况,您可以先将数据分配给TempData来解决问题:
TempData["myStuff"] = myData;
然后在新的重定向操作中:
ViewBag["myBaggedStuff"] = TempData["myStuff"];
然后在共享视图中使用ViewBag。