C# PageData值在部分视图内返回null
我在C# PageData值在部分视图内返回null,c#,asp.net-mvc,C#,Asp.net Mvc,我在\u ViewStart.cshtml中有此代码: @{ Layout = "~/Views/Shared/_Layout.cshtml"; var cultureRoute = ViewContext.RouteData.Values["lang"].ToString(); PageData["culture"] = new System.Globalization.CultureInfo(cultureRoute); } 并且在我的视图中检索文化时没有任何问题
\u ViewStart.cshtml
中有此代码:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var cultureRoute = ViewContext.RouteData.Values["lang"].ToString();
PageData["culture"] = new System.Globalization.CultureInfo(cultureRoute);
}
并且在我的视图中检索文化
时没有任何问题,包括页面顶部的部分\u布局
视图:
@{
var culture = @PageData["culture"];
}
但是,在创建一个新的局部视图后,\u导航栏
,当使用从insde\u布局
调用它时,完全相同的代码段将区域性
分配给空值
@Html.Partial("_Navbar")
为什么该
PageData
变量不再可用?该PageData
是PageContext
的一部分。Razor呈现视图时,会自动将其与\u ViewStart
页面和布局页面组合。执行此操作时,它会传递PageContext
,以便相同的PageData
可用于所有3个视图
不幸的是,当它进入部分视图时,Html.partial/RenderPartial
都使用HtmlHelper
工作,它只传递一个模型(可以通过显式提供第二个参数替换)和ViewData
作为ViewContext
的一部分。这就是为什么局部视图从呈现它们的视图中看不到页面数据的原因
如果要使区域性在局部视图中可用,可以将其放入ViewData
中。这里唯一的怪癖是,虽然它在视图、布局和部分页面中作为属性提供,但在\u ViewStart
页面中,您必须通过ViewContext
属性访问它:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var cultureRoute = ViewContext.RouteData.Values["lang"].ToString();
ViewContext.ViewData["culture"] = new System.Globalization.CultureInfo(cultureRoute);
}
然后只需在其他地方使用ViewData而不是PageData:
@{
var culture = ViewData["culture"];
}
这有一些关于Razor在呈现页面时如何使用
PageContext
的详细信息。PageData
是PageContext
的一部分。Razor呈现视图时,会自动将其与\u ViewStart
页面和布局页面组合。执行此操作时,它会传递PageContext
,以便相同的PageData
可用于所有3个视图
不幸的是,当它进入部分视图时,Html.partial/RenderPartial
都使用HtmlHelper
工作,它只传递一个模型(可以通过显式提供第二个参数替换)和ViewData
作为ViewContext
的一部分。这就是为什么局部视图从呈现它们的视图中看不到页面数据的原因
如果要使区域性在局部视图中可用,可以将其放入ViewData
中。这里唯一的怪癖是,虽然它在视图、布局和部分页面中作为属性提供,但在\u ViewStart
页面中,您必须通过ViewContext
属性访问它:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var cultureRoute = ViewContext.RouteData.Values["lang"].ToString();
ViewContext.ViewData["culture"] = new System.Globalization.CultureInfo(cultureRoute);
}
然后只需在其他地方使用ViewData而不是PageData:
@{
var culture = ViewData["culture"];
}
本文提供了Razor在呈现页面时如何使用PageContext
的更多详细信息