【问题标题】:asp using master page variable in content pageasp在内容页面中使用母版页变量
【发布时间】:2017-12-13 23:29:33
【问题描述】:

我已经阅读了所有我能找到的关于如何做到这一点的帖子,并尝试了所有这些。我有一个名为 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>

后面的Masterpage代码包括:-

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' 并且没有扩展方法 接受“MasterPage”类型的第一个参数的“MyAccessLevel”可能是 找到(您是否缺少 using 指令或程序集引用?) 8_Live_main.aspx D:\Development\dnanew.steelpencil.com\Live\main.aspx.cs 13 活跃

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    但是,您应该知道,Master Page_Load 在页面生命周期的较晚阶段初始化,而不是页面。所以当你访问AccessLevel的值时,它永远是空的。

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

    【讨论】:

    • 谢谢 - “Site master = ((Site)(Page.Master));”行给出错误 CS0246“找不到类型或命名空间名称“站点”(您是否缺少 using 指令或程序集引用?”
    • @OrmondStock 抱歉,我必须更好地解释这一点。我已经更新了我的答案。
    【解决方案2】:

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

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

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

    所以现在,根据您的要求,要访问在您的master 页面中定义的public 属性(AccessLevel)并分配给子/内容页面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

    【讨论】:

      【解决方案3】:

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

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

      指向您的页面的指令

      【讨论】:

        猜你喜欢
        • 2011-02-21
        • 2014-03-04
        • 1970-01-01
        • 2019-01-21
        • 2011-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多