jaa*_*aap 5 layout razor asp.net-mvc-3
在.NET Razor Web应用程序中,我正在尝试以编程方式设置Layout
.我不能使用_ViewStart.cshtml
,也不会@{ Layout = "..." }
在每个页面上设置.这就是我想出的:
基WebViewPage
类:
public abstract class SitePage<T> : System.Web.Mvc.WebViewPage<T>
{
private object _layout;
public new dynamic Layout { get { return _layout; } }
public override void InitHelpers()
{
base.InitHelpers();
_layout = "~/Themes/" + Settings.Theme + "/Views/_Layout.cshtml";
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序中,web.config
我指定所有视图以使用此基页.但Layout
似乎从未使用过.这可能有什么问题?
在WebViewPage
类继承WebPageBase
,有一个命名的属性Layout
,如:
public override string Layout { get; set; }
Run Code Online (Sandbox Code Playgroud)
您可以覆盖Layout
属性,或更改_layout逻辑以实现您的目的.例如:
public abstract class SitePage<T> : System.Web.Mvc.WebViewPage<T> {
// set this modifier as protected, to make it accessible from view-pages
protected string _layout{
get {
return base.Layout;
}
set {
base.Layout = value;
}
}
public override void InitHelpers() {
base.InitHelpers();
_layout = "~/Themes/" + Settings.Theme + "/Views/_Layout.cshtml";
}
}
Run Code Online (Sandbox Code Playgroud)
和/或在视图页面中,您也可以设置它:
@{
_layout = "_Your_Special_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
更新:使用一个标志来避免在多次分配_layout时堆栈溢出:
public abstract class SitePage<T> : System.Web.Mvc.WebViewPage<T> {
public bool LayoutAssigned {
get {
return (ViewBag.LayoutAssigned == true);
}
set {
ViewBag.LayoutAssigned = value;
}
}
// set this modifier as protected, to make it accessible from view-pages
protected string _layout{
get {
return base.Layout;
}
set {
base.Layout = value;
}
}
public override void InitHelpers() {
base.InitHelpers();
if(!LayoutAssigned) {
_layout = "~/Themes/" + Settings.Theme + "/Views/_Layout.cshtml";
LayoutAssigned = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过实现自定义WebViewPage来实现同样的目的,但是在我的自定义类中更改WebViewPage.Layout没有任何效果(正如您也发现的那样).
最后我最终改变了我的_ViewStart.cshtml来获得这段代码:
@{
this.Layout = this.Request.QueryString["print"] == "1"
? "~/Views/Layout/_Print.cshtml"
: "~/Views/Layout/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
它可能没有按照你想要的方式实现,但它肯定会让事情变得干燥,这是重点.
归档时间: |
|
查看次数: |
6207 次 |
最近记录: |