2009-10-10 87 views
0

如果我有一個文本框txtInfo以我通過發佈的形式提交,如果我回發到頁面,我可以使用txtInfo.Text閱讀在文本框中輸入的值。如果我張貼到不同的頁面怎麼辦?我是否必須解析Request.Form作爲控制名稱殘缺(這是我現在正在做的),還是我可以從混亂中獲得它?.net通過狀態?c#如何檢索發佈數據

感謝


謝謝你的答案爲止......對不起,我應該有一個更加清楚一點。這個控件是一個runat="server"控件。這就是我現在降級的 - 不是很漂亮。

foreach (String key in page.Request.Form.AllKeys) 
    { 
     String[] controlName = key.Split('$');//remove that horrrible .net naming - thanks Bill. 
     keyName = controlName[controlName.Length - 1];//get the last value so we always have the name 
     keyValue = page.Request.Form[key]; 
     if (keyValue != "") 
     { 
      switch (keyName)... 

回答

4

你應該看看Cross Page Postbacks

由於本頁所提到您可以輕鬆地使用可以訪問txtInfo如下:

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

這看起來比我更穩定的解決方案。我會嘗試並相應投票。 .Findcontrol上的表現如何?有沒有辦法直接引用控件 - 即Page.PreviousPage.txtInfo? – Praesagus 2009-10-10 21:13:05

+0

我已經完成了ASP.NET,但是IIRC已經有一段時間了,您可以將Page.PreviousPage作爲您的Web表單類來投放。在您的Web表單類中,您可以公開TxtInfo.Text值或TextBox控件。然後,所有你需要做的就是像(MyPage.PreviousPage作爲MyInfoWebForm).MyTxtInfoTextBox.Text來訪問該值。如果可能的話,我建議只公開文本的值。如果不清楚,請告訴我。 – 2009-10-10 21:20:10

+0

雖然看過你的例子,如果你沒有做跨頁面發佈,你需要做的就是Request.Form [「txtInfo」],正如其他人提到的那樣。另外,如果在你的頁面中定義了,那麼你在代碼後面所要做的就是訪問像txtInfo.Text這樣的值。你不需要做一個Request.Form [「txtInfo」] ... – 2009-10-10 21:23:20

3

這有什麼錯?

string txtInfo = Request.Form["txtInfo"]; 
if(txtInfo == null) txtInfo = ""; 
+0

我認爲他發佈到不同的頁面,而不僅僅是一個普通的帖子。也許我誤解了? – 2009-10-10 20:31:33

+0

複雜的由asp:TextField生成的名稱是什麼問題 – orip 2009-10-10 20:39:21

+0

啊我得到了 - 所有的命名容器的東西。我現在看到了這個問題。咕 - 謝謝你的回覆:) – 2009-10-10 20:48:07

0

簡單的解決辦法是使用一個簡單的<input type="text">代替的<asp:TextBox>。給它一個name屬性,然後通過Request.Form訪問它。

.aspx文件:

<input type="text" name="foo" /> 

發佈到代碼隱藏(相同的頁面,不同的頁面,無所謂):

var text = Request.Form["foo"];