2017-07-10 76 views
0

我已閱讀每篇文章,我可以找到關於如何做到這一點,並嘗試所有。我有稱爲DNAStaff(在根)一個Master頁面包含: -asp在內容頁面使用主頁面變量

<%@ 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」給​​出了一個錯誤: -

Error CS1061 'MasterPage' does not contain a definition for 'MyAccessLevel' and no extension method 'MyAccessLevel' accepting a first argument of type 'MasterPage' could be found (are you missing a using directive or an assembly reference?) 8_Live_main.aspx D:\Development\dnanew.steelpencil.com\Live\main.aspx.cs 13 Active

我想設置在負載母版的變量MyAccessLevel在任何內容頁閱讀。我明顯錯過了一些東西,有人可以幫忙嗎?

回答

1

您可以像這樣訪問主頁面。

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

哪裏Site1是母版頁(public partial class Site1 : System.Web.UI.MasterPage)的類名

但是你應該知道,法師的Page_Load是在頁面生命週期比頁面後一階段初始化。因此,當您訪問AccessLevel的值時,它將始終爲空。

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

+0

感謝的內容 - 行「網站主=((網站)(Page.Master)) ;」給出錯誤CS0246「無法找到類型或名稱空間名稱」Site「(您是否缺少使用指令或程序集引用?」 –

+0

@OrmondStock對不起,我不得不更好地解釋這個問題。 – VDWWD

+0

感謝你 - 工作。 –

0

This post應該回答你的問題。
您必須添加

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

指令到您的網頁

+0

它已經在那裏。 –

1

正如在內容頁面已經已分配的MasterType像下面。

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

所以,現在你的孩子/內容頁可以能夠使用/訪問master佈局,包括在master頁中定義的變量public /屬性。

所以,現在,按您的要求,訪問定義的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

相關問題