2012-08-17 60 views
0

我的網站使用母版頁,我已經放置了兩個控件,一個文本框和一個ImageButton,他們打算在所有內容網站上查看和訪問。下面是的Site.Master的ASPX代碼:FindControl在MasterPage中,首先點擊生成空字符串

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<asp:ImageButton ID="ImageBtn" runat="server" ImageUrl="~/Image.png" 
    PostBackUrl="~/Result.aspx"></asp:ImageButton> 

單擊該按鈕應訪問者重定向到Result.aspx它一定。

Result.aspx.cs在Page_Load事件如下:

protected void Page_Load(object sender, EventArgs e) 
    { 
     TextBox txbx = this.Master.FindControl("TextBox1") as TextBox; 
     if (txbx != null) 
     { 
      Label1.Text = "Value: " + txbx.Text; 
     } 
     else 
     { 
      Label1.Text = "TextBox seems to be null"; 
     } 
    } 

怪異行爲出現時,圖像按鈕被點擊的第一次。訪問者從「Value:」頁面(即空字符串「」)獲取此信息,即使在TextBox1中輸入了值。隨後的點擊會正確顯示值,例如「值:SomeText」。

爲什麼第一次不值「過來」?

有沒有更好的方法來確保?

  • 的訪問者重定向到Result.aspx和
  • 該值是「登記」,可在Result.aspx.cs和處理
  • ,用戶將被重定向,如果Result.aspx不使用圖像按鈕進入一項PostBackUrl

我試過的IsPostBack但似乎出現異常使用母版頁的前一頁的時候......

非常感謝的答WER!

真誠,

先生凱

回答

1

如果你在你的ImageButton母版頁上使用PostBackURL和來自另一個頁面,您必須使用:

PreviousPage.Master.FindControl("TextBox1") as TextBox;

如果你是PostBackURL頁面上,點擊您的ImageButton,你需要使用

Master.FinControl("TextBox1") as TextBox;

(|上一頁將是在這種情況下空)

你可以使用這樣的事情:

var txbx = PreviousPage == null ? 
    Master.FindControl("TextBox1") as TextBox : 
    PreviousPage.Master.FindControl("TextBox1") as TextBox; 

參見:http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage(v=vs.100).aspx 在註釋部分。

0

既然你知道你的形式從主派生...你嘗試過明確的類型轉換得到它???如

TextBox txbx =((site.Master)this).Textbox1;

然後從那裏做任何你想做的事......自從進入asp.net以來已經有一段時間了,但是請記住在我的一箇舊應用程序中做了類似的事情。

+0

沒有工作:\ \ – GordonLiddy 2012-08-17 12:37:35