2010-05-13 35 views
1

我知道這是有史以來最簡單的ASP.Net問題,但我很困惑。我有一個表單,其中我的訪問者將輸入姓名,地址等。然後,我通過提交按鈕的PostBackUrl屬性將該表單張貼到另一個頁面,其中這些字段應該全部重新組成新的隱藏字段,然後再次發送到PayPal。如何在發佈的表單中檢索控件的值?

我的問題是我無法獲得訪客在原始頁面輸入的值。任何時候我放入「runat ='server'」,ASP.Net都會完全改變控件的ID,使得不可能知道如何訪問。在POST的表單中,我嘗試了Request.Form["_txtFirstName"],結果爲空。然後我嘗試((TextBox)PreviousPage.FindControl("_txtFirstName")).Text,那也是空的。我試過這些變體。我無法弄清楚我應該如何獲得這些控制。爲什麼這些東西需要如此困難?

回答

0

是否使用MasterPages?如果是這樣,你要搜索的內容佔位符內部的控制:

ContentPlaceHolder placeholder = (ContentPlaceHolder)Page.PreviousPage.Master.FindControl("ContentPlaceHolder1"); 

TextBox previousPageTextBox = (TextBox)placeholder.FindControl("TextBox1"); 
+0

這也是一個非常好的點 – 2010-05-13 08:24:35

+0

哇,這確實是問題所在。什麼樣的惡夢。感謝patmortech! – 2010-05-13 15:01:30

0

第一頁上的TextBox控件的名稱是什麼?不要使用clientId,使用它在調用FindControl時聲明的ID,因此如果它被稱爲ID =「TextBox1」,請使用下面的代碼來查找它。

你的第二種方法看起來沒問題,只是你錯過了Page.PreviousPage。這應該不會影響結果。你有跟蹤嗎?

這是從文檔,放置在你的目標頁面的標準語法...

if (Page.PreviousPage != null) 
{ 
    TextBox SourceTextBox = 
     (TextBox)Page.PreviousPage.FindControl("TextBox1"); 
    if (SourceTextBox != null) 
    { 
     Label1.Text = SourceTextBox.Text; 
    } 
} 
+0

此外,見patmortech的關於母版頁 – 2010-05-13 08:25:28

+0

好控件的ID是_txtFirstName在服務器端的答案。但是,當我進入下一頁時,執行Request.Form(「_ txtFirstName」)會產生空結果。看看它中的控件數組,顯示我的控件現在是ctl00 $ _contentPlaceHolder1 $ _txtFirstName,顯然這是無法識別的。我認爲通過使用POST,使用Request.Form()可以解決我的問題(之前我做過Response.Redirect並且沒有Request.Form內容)。沒想到看到所有的ID都改變了。 PreviousPage結束工作(見下面的答案),但是我們在2.0之前做了什麼? – 2010-05-13 15:07:09

0

在ASP.NET控件是否是一個服務器端控件,只需通過提供的ID叫它編碼時,而不是渲染的。

標記:

<input type="text" id="myId" runat="server" /> 

後面的代碼:

string controlValue = myId.Value; 
相關問題