asp在内容页面中使用母版页变量

时间:2017-07-10 09:33:38

标签: c# asp.net master-pages public

我已经阅读了有关如何执行此操作的所有帖子并尝试了所有这些内容。我有一个名为DNAStaff(在根目录)的母版页,其中包含: -

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="DNAStaff.master.cs" Inherits="DNAStaff" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <title></title>
            <link href="~/Styles/DNA.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
     </asp:ContentPlaceHolder>

...............
    </div>
    </form>
</body>
</html>

背后的母版页代码包括: -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.IO;
using System.Data;

public partial class DNAStaff : System.Web.UI.MasterPage
{
    public string MyAccessLevel
    {
    get; set;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        string ConnectionString = "Data Source=NZ1;Initial Catalog=Intranet;Integrated Security=false;UID=IntranetAccess;PWD=*****";
        string sqlstring = @"select [MenuID], [Item], Target, SecLevel from [MENUS] ";
        SqlConnection conn = new SqlConnection(ConnectionString);
        SqlDataReader rdr = null;
        int MainGroup;
        try
        {
            if (Request.Cookies["userinfo"] != null)
            {
                MyAccessLevel = Server.HtmlEncode(Request.Cookies["userinfo"]["accessLevel"]);
            }
            else
            {
                MyAccessLevel = "1";
            }
    .........

内容页面包括:

<%@ Page Title="" Language="C#" MasterPageFile="~/DNAStaff.master" AutoEventWireup="true" CodeFile="main.aspx.cs" Inherits="main" %>
<%@ MasterType virtualpath="~/DNAStaff.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    Set Primary Project
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:Content>

enter code here

后面的内容页面代码包含:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class main : System.Web.UI.Page
{
    string AccessLevel = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        AccessLevel = Master.MyAccessLevel;
        TextBox1.Text = AccessLevel;
    }
}

“AccessLevel = Master.MyAccessLevel”行给出错误: -

  

错误CS1061'MasterPage'不包含的定义       'MyAccessLevel'并没有扩展方法       'MyAccessLevel'接受'MasterPage'类型的第一个参数可能是       找到了(你是否错过了使用指令或程序集引用?)       8_Live_main.aspx D:\ Development \ dnanew.steelpencil.com \ Live \ main.aspx.cs       13活跃

我想在加载时在MasterPage中设置变量MyAccessLevel,并在任何内容页面中读取它。我显然缺少一些东西,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

您可以像这样访问母版页。

Site1 master = ((Site1)(Page.Master));
TextBox1.Text = master.AccessLevel;

其中Site1是母版页的类名(public partial class Site1 : System.Web.UI.MasterPage

但是,您应该知道Master Page_Load在页面生命周期的后期初始化而不是Page。因此,当您访问AccessLevel的值时,它将始终为空。

请参阅https://msdn.microsoft.com/en-us/library/dct97kc3.aspx

答案 1 :(得分:1)

在内容页面中,您已经分配了MasterType,如下所示。

<%@ MasterType virtualpath="~/DNAStaff.master" %>

现在您的孩子/内容页面可以使用/访问master布局,包括public页面中定义的master变量/属性。

现在,根据您的要求,访问public页面中定义的AccessLevel属性(master)并分配到子/内容页面textbox,你需要写下面的代码

Site myMaster = ((Site)(Page.Master));
TextBox1.Text = myMaster .AccessLevel;

希望它能解决你的问题。

以下是有关母版页和访问母版页内容的更多参考资料

https://msdn.microsoft.com/en-us/library/wtxbf3hh.aspx

https://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

答案 2 :(得分:0)

This post应该回答你的问题。
你必须添加

<%@ MasterType VirtualPath="~/your page path" %>

指向您网页的指令