2013-03-07 57 views
3

我試圖從我的子頁面aspx頁中設置的母版頁中訪問隱藏字段值,但無法訪問母版頁代碼隱藏page_load事件。無法從子頁面訪問page_load事件的母版頁中的隱藏字段值

兒童aspx頁面:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server"> 
<telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server"> 
</telerik:RadStyleSheetManager> 
<div class="center_content"> 
    <div style="text-align: left"> 
     <h2> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
     </h2> 
    </div> 
    <div style="text-align: left"> 
     <uc1:Chart ID="Chart1" runat="server" /> 
    </div> 
    &nbsp;</div> 
    <asp:HiddenField ID="hid1" runat="server" Value="Satellite Availability % Report" /> 

母版頁:

<asp:Label runat="server" ID="Label1" Style="text-align: right; font-size: xx-large; color: #808080"></asp:Label> 

主代碼隱藏頁:這是我想設置從子頁的報告的文本值。

protected void Page_Load(object sender, EventArgs e) 
    { 
     HiddenField hid1 = (HiddenField)MainContent.FindControl("MainContent_hid1"); 
    if (hid1 != null) 
    { 
     Label1.Text = hid1.Value; 
    }  } 
<input type="hidden" name="ctl00$MainContent$hdnRptTitle" id="MainContent_hdnRptTitle" value="Satellite Availability % Report" /> 

hdnRptTitle變量沒有智能感知。

我該如何得到這個工作?這似乎很簡單,但不知道爲什麼它不工作...

+0

爲什麼你認爲你可以在一個母版頁的內容頁的訪問控制? 「MasterPage」用於多個頁面,爲什麼要將其與特定頁面硬鏈接,如果沒有它,它將無法工作。如果'HiddenField'對於主人的操作是必不可少的,你應該在那裏聲明它。 – 2013-03-07 14:59:07

+0

你建議我做什麼?對於每個子頁面,都需要在母版頁上顯示不同的rpt標題。我怎樣才能做到這一點?謝謝.... – sagesky36 2013-03-07 15:19:40

+0

然後內容頁面可以訪問它的主要設置文本,但反之亦然。 – 2013-03-07 15:20:38

回答

1

您可以添加下面的代碼你MasterPage

HiddenField hid1 = (HiddenField)MainContent.FindControl("hid1"); 
if (hid1 != null) 
{ 
    Label1.Text = hid1.Value; 
} 

編輯:確保您LabelMasterPage是你的ContentPlaceHolder之外,因爲我第一次測試時犯了這個錯誤。

上面的代碼應該工作的規定外,您控制的名字,我不知道爲什麼你正在使用:

.FindControl("MainContent_hid1");

,而不是

.FindControl("hid1");

+0

這是我試過的,但是hid1不斷出現null。查看我的網頁現在看起來如何更新的編輯。不知道爲什麼它沒有找到控制..... – sagesky36 2013-03-07 16:08:40

+0

我已經編輯答案,我認爲這將是Label1即將到來,因爲我測試和發佈前有相同的問題。 – Tanner 2013-03-07 16:12:34

+0

不,情況並非如此......在調試過程中,hid1出現空白。因此,它不會將Label1設置爲一個值...不知道該怎麼做...我很難...這應該工作...該標籤不在ContentPlaceHolder中。 – sagesky36 2013-03-07 16:22:24

0

你爲什麼認爲你可以訪問母版頁的內容頁面中的控件? A MasterPage用於多個頁面,爲什麼要將其與特定頁面硬鏈接,如果沒有它,它將不再工作。如果HiddenField對於主設備的操作至關重要,則應在此處聲明。

對於每個子頁面,都有一個不同的rpt標題,需要在母版頁上顯示 。我怎樣才能做到這一點?

然後,內容頁面可以訪問它的主設置文本,但反之亦然。

你可以提供主設備的公共財產,如:

public string ReportTitle 
{ 
    get { return this.LblReportTitle.Text; } 
    set { this.LblReportTitle.Text = value; } 
} 

,並在ContentPage,例如在它的Page_Load

protected void Page_Load(object sender, EventArgs e) 
{ 
    // assuming the type of your master is SiteMaster 
    var master = this.Master as SiteMaster; 
    if (master != null) 
     master.ReportTitle = hdnRptTitle.Value; 
} 

這種方法仍然是一個連接主(或多個)孩子,但如果內容頁面使用不同的主類型,它仍然「有效」。如果有人刪除或更改屬性,還會通知編譯器錯誤。

但是,在內容存儲報告類型或主顯示的地方,它是一個實現細節,將來可以更改而不會破壞任何內容。

1

你可以這樣使用。
您的母版頁上可能有多個conterntPlaceHolder
使用含有你hidden field在這種情況下,ID我認爲它是ContentPlaceHolder1

HiddenField hid1 = (HiddenField)ContentPlaceHolder1.FindControl("hdnRptTitle"); 
    if (hid1 != null) 
    { 
    Label1.Text = hid1.Value; 
    } 

有一個類似的職位上so
How to access content page controls from master page in asp.net

+0

可能是他喜歡的,但我從我在答覆中提供的鏈接中得到答案。 – 2013-03-07 15:33:13

+0

Sheknar,謝謝。我實現了,但控制出現null。我的隱藏字段位於Maincontent佔位符內。我會編輯我的代碼,讓你看到我有什麼,請評估並讓我知道什麼可能是錯誤的...非常感謝... – sagesky36 2013-03-07 15:58:56

+0

明白了!在調試並查看Controls集合後,我看到控件的名稱是「hid1」而不是「MainContent_hid1 – sagesky36 2013-03-07 16:30:01

0

您可以參考一個母版頁,並得到控制像這樣:

VB.Net:

Dim te As HiddenField 
Dim val As String 

te = Me.Page.Master.FindControl("hdnRptTitle") 
val = te.Value 

C#:

HiddenField te = default(HiddenField); 
string val = null; 

te = this.Page.Master.FindControl("hdnRptTitle"); 
val = te.Value; 
+0

」我認爲他想讓它反面(我知道問題標題很混亂) – Win 2013-03-07 15:39:08

相關問題