【发布时间】:2015-03-04 14:52:19
【问题描述】:
我之前一直使用 TempData 来设置诸如“body css 类”之类的东西,然后页面和部分可以覆盖。
在意识到 TempData 使用会话之后,我现在已经转移到 ViewData,但是在部分中设置 ViewDataDictionary 的值在返回到页面时基本上会被忽略 - 并且永远不会向上传播布局层次结构。
我尝试从我的页面内部调用“RenderPartial”,并使用允许我指定要传递的 ViewData 的覆盖:
布局:
页面:
@{
var cssClass = (ViewData["something"] != null) ? ViewData["something"].ToString() : "";
}
<body class="@cssClass">
页面:
@{
ViewData["something"] = "blah";
Html.RenderPartial("MyPartial", ViewData)
}
部分:
@{
ViewData["something"] += " blah";
}
当我在 Layout 中进行调试时,我可以看到 ViewData["something"] 是“blah” - 部分设置不正确。
当我使用 TempData 时,这可以正常工作。由于 ASP 会话锁定及其对并发请求的影响,我真的不想重新使用 TempData。
以前有人做过这个吗?我忽略了什么吗?
谢谢
【问题讨论】:
-
如果您遇到的问题与局部视图未正确呈现有关,read this。否则,我们可能需要有关您所面临问题的更多具体信息。此外,您不应该使用 ViewData 或 TempData 来保留查看特定信息。您应该使用视图模型。
-
一切正常。我在视图内部使用它,由视图显示。例如为特定页面设置特定的 CSS 类。问题是 ViewData 正在设置我的部分不传播
-
你仍然可以使用 HttpContext.Current.Items["something"]
标签: asp.net-mvc razor