加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – .NET MVC 3以编程方式设置布局

发布时间:2020-12-16 03:41:32 所属栏目:asp.Net 来源:网络整理
导读:在.NET Razor Web应用程序中,我正在尝试以编程方式设置布局.我不能使用_ViewStart.cshtml,也不要在每个页面上设置@ {Layout =“…”}.这就是我想出的: 基础WebViewPage类: public abstract class SitePageT : System.Web.Mvc.WebViewPageT{ private object
在.NET Razor Web应用程序中,我正在尝试以编程方式设置布局.我不能使用_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";
    }
}

在应用程序web.config中,我指定所有视图以使用此基页.但布局似乎从未使用过.这可能有什么问题?

解决方法

WebViewPage类继承自WebPageBase,该WebPageBase具有名为Layout的属性,如:

public override string Layout { get; set; }

您可以覆盖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";
    }
}

和/或在视图页面中,您也可以设置它:

@{
    _layout = "_Your_Special_Layout.cshtml";
}

更新:使用一个标志来避免在多次分配_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;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读