Asi*_*raz 3 c# asp.net-mvc razor asp.net-mvc-4
我正在尝试传递一个 ViewBag 属性来自定义 _Layout.cshtml 中的 html。
@Styles.Render(ViewBag.IsEnglish ? "~/Content/css-en" : "~/Content/css-ur")
Run Code Online (Sandbox Code Playgroud)
为此,我的基本控制器中有代码
public class BaseController : Controller
{
protected virtual void OnAuthorization(AuthorizationContext filterContext)
{
ViewBag.IsEnglish = Request.RequestContext.RouteData.Values.ContainsKey("Culture") ?
(Request.RequestContext.RouteData.Values["culture"].ToString().ToLower() == "en")
: true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我的 _Layout.cshtml 在调用 ViewBag 的地方给出了错误,在控制器的代码设置该属性之前。我认为 _Layout 是由 ViewEngine 执行的,而 ViewEngine 在 Controllers 运行后运行。我应该在哪里放置我的 ViewBag 初始化代码,以便 _Layout.cshtml 可以使用它?
在您的基本控制器中,试试这个:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
ViewBag.IsEnglish = requestContext.RouteData.Values.ContainsKey("Culture") ?
(requestContext.RouteData.Values["culture"].ToString().ToLower() == "en") : true;
}
Run Code Online (Sandbox Code Playgroud)
我假设你想默认为英语。如果不是这种情况,请更改: true;
为: false;
另请参阅MSDN 上的Controller.Initialize 方法。
归档时间: |
|
查看次数: |
7219 次 |
最近记录: |