在CSDN的博文中看到了 muziduoxi 的文章:http://blog.csdn.net/muziduoxi/article/details/5386543 雖然里面提到的方法沒有解決我的難題,但是我也是根據里面的方法想到現在所用的方法的,所以還是需要感謝 因為我要的變量初始化的時候是空的,如果使用muziduoxi的方法就只能讀取到初始化時候的值,我做了個跟蹤,發現有模板頁的頁面運行的時候是先運行本頁的變量的定義→ 到模板頁的變量定義→ 到本頁的Page_Load方法→ 到模板頁的PageLoad方法,所以如果我要獲取的模板頁變量是在其Page_Load中初始化的話,那么在本頁Page_Load中是讀取不到的,如果要獲取到的話方法就是:在本頁的aspx中的頁面上使用:<%=(this.Master asagency_web_agency_master).systemURL %>,至於為什么是 agency_web_agency_master這個我理解的就是它把點號.換成了下划線_,其實這個名稱會在你輸入完 as 然后空格的時候提示你的。
具體的代碼如下:
模板頁有個公共變量的定義:public string systemURL = "";
然后在內容頁的aspx代碼中直接使用:<%=(this.Master as agency_web_agency_master).systemURL %> 就可以正常輸出了。
而且不單單可以獲得字段,也可以獲得對象,如果模板頁有一個類:public Model.gy_agencyInfo modagency = new Model.gy_agencyInfo(); 類有個字段是:systemURL
在內容頁的aspx代碼中直接使用:<%=(this.Master as agency_web_agency_master).modagency.systemURL %> 就可以正常輸出。
為了方便自己記住 muziduoxi 的方法,特意把它粘貼到了我這里,以方便自己查看:
獲取母模版頁的變量和屬性值: 模板頁:
- public partial class MasterPage : System.Web.UI.MasterPage
- {
- public int UserId {
- get { return 342; }
- }
- public string UserName = "shenjk";
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- }
public partial class MasterPage : System.Web.UI.MasterPage { public int UserId { get { return 342; } } public string UserName = "shenjk"; protected void Page_Load(object sender, EventArgs e) { } }
在內容頁獲取該值:
- protected void Page_Load(object sender, EventArgs e)
- {
- PropertyInfo pl = this.Master.GetType().GetProperty("UserId");
- object o = pl.GetValue(this.Master, null); //o=342
- FieldInfo f = this.Master.GetType().GetField("UserName");
- object o1 = f.GetValue(this.Master); //o1=shenjk
- }
protected void Page_Load(object sender, EventArgs e) { PropertyInfo pl = this.Master.GetType().GetProperty("UserId"); object o = pl.GetValue(this.Master, null); //o=342 FieldInfo f = this.Master.GetType().GetField("UserName"); object o1 = f.GetValue(this.Master); //o1=shenjk }
TextBox myemail = (TextBox)this.Page.Master.FindControl("show").FindControl("email"); string email = myemail.Text;
這2行代碼讓我找了2天,我一直認為是:
TextBox myemail = (TextBox)this.Page.FindControl("email"); string email = myemail.Text;
總是一個錯誤:未將對象引用設置到對象的實例。
例如: 1. A.aspx用了一個叫MasterPage.master的母板頁。 MasterPage.master.cs里定義了一個 int 型的變量 flag = 1 如何在A.aspx.cs里讀出flag變量的值呢? 在 Page_Load 事件中添加如下代碼: ((MasterPage)Page.Master).flag = 2; 或 int c=((MasterPage)Page.Master).flag; 也可以 (this.Master as MasterPage).flag = 2 2.下面的代碼示例演示如何使用內容頁訪問前一個代碼示例中的母版頁上的公共屬性 SiteName。 <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="MasterPage Example" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { MasterExample m = (MasterExample)Page.Master; mylabel.Text = m.SiteName; } </script> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> Hello, Master Pages! <asp:Label runat="server" Text="Label" ID="mylabel"></asp:Label> </asp:Content> 3.獲取和設置母版頁Master中的一個控件的值 ((Controls_wucTopBar)Master.FindControl("wucTopBar1")).strNavigaName = “電影頻道”; 4.可以這樣zu 在內容頁面里加上: <%@ MasterType VirtualPath="~/MasterPage33.master" %> 在后台代碼中 protected void Page_Load(object sender, EventArgs e) { Master.LabelText = "現在時間:" + System.DateTime.Now.ToShortTimeString(); } |