【问题标题】:Layout page's code not being sent to content pages布局页面的代码未发送到内容页面
【发布时间】:2014-07-04 15:19:04
【问题描述】:

我有一个 _SiteLayout.cshtml 文件,该文件构建了网站并包含一些 C# 代码。如何将 _SiteLayout 的 C# 代码发送到其所有子页面?我正在使用 WebPages Razor 2。

提前谢谢你。

【问题讨论】:

    标签: razor razor-2 asp.net-webpages


    【解决方案1】:

    有两种实现布局页面的方法:

    在后一种情况下,您可以在代码部分使用 Layout = null 禁用单个页面的布局页面。

    编辑

    如果要将数据从母版页传递到部分页面,则必须使用 RenderPage() 方法而不是 RenderBody() 方法,但您的网站结构会完全改变。

    例如,如果您想创建一个从表中提取数据并将它们传递到可以更改的部分页面的母版页,您的母版页可能类似于:

    @{
        var db = Database.Open("Northwind");
        var data = db.Query(@"SELECT [Product Id], [Product Name], 
                [English Name] FROM Products ");
        var page = "Partial.cshtml";
    }
    
    <!DOCTYPE html>
    
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            @RenderPage(page, new {gridData = data})
        </body>
    </html>
    

    Partial.cshtml 中的代码从 Page.gridData 变量中获取数据并将它们显示在 WebGrid 中:

    @{
        var grid = new WebGrid(Page.gridData);
    }
    
    <div>@grid.GetHtml()</div>
    

    【讨论】:

    • 我使用的是第一种方法,但是,我在布局页面中执行的 C# 代码并未在使用该布局页面进行布局的页面上实现。这就是我需要做的,但出于某种原因,它只是没有。
    • @user3250722 我误解了你的问题。现在我已经编辑了我的答案。
    • 感谢您的回答,我曾希望一个简单的布局页面也可以将布局页面的 C# 代码传递给其内容页面,但不幸的是当时没有。就我而言,我正在检查用户是否在布局页面上登录,因此我不必为每个内容页面都做同样的事情,我认为它有效,但显然不是,呵呵。感谢您的回答!
    • @user3250722 要保护多个页面,您应该使用 _PageStart.cshtml。看这个链接:go.microsoft.com/fwlink/…
    • 非常感谢!我会试试这个!
    猜你喜欢
    • 2014-12-18
    • 2017-09-23
    • 2023-03-10
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多