2010-02-17 77 views
3

我有一個ASP.NET web表單,在我有一個隱藏字段,這樣的:ASP.NET如何閱讀HTML表單元素?

<form id="form1" runat="server" action="http://localhost/fa/Default.aspx"> 
     <div> 
    <input id="requestData" type="hidden" name="requestData" value="" runat="server" /> 
    <asp:Button ID="btnPOST" Text="POST" runat="server" OnClick="do_POST" /> 
     </div> 
    </form> 

在do_POST我有這樣的方法:

protected void do_POST(object sender, EventArgs e) 
     { 
//requestDataField is of the type protected global::System.Web.UI.HtmlControls.HtmlInputHidden requestData; 

      requestDataField.Text = "FOO!"; 
     } 

當我提交表單(按按鈕),它進入到服務器(的處理)wheer我有這樣的:

string requestData = context.Request.Form["requestData"]; 

我得到一個空字符串..

但如果我給你這樣一個值:

<input id="requestData" type="hidden" name="requestData" value="FOO" runat="server" /> 

我得到的 「FOO」

我缺少什麼?

+0

「requestDataField.Text =」FOO!「;」 它應該是「requestDataField.Value =」FOO!「;」 但是我只是想動態地填充一些html元素或控件並在服務器端讀取。 – user252816 2010-02-17 13:11:48

回答

2

它沒有這樣做的原因是因爲該方法在頁面回傳後被調用。意思是說,如果你將.Text更改爲.Value,那麼它實際上正在工作,那時你已經閱讀了你的表單並且它是一個空值。我記得在一個項目中,你可以告訴你的表單在運行一個函數之前不要提交(但是它需要一個在運行aspx之前運行一個完整的javascript)。您應該嘗試查看是否有辦法強制您的表單在執行回發之前運行您的功能。

1

您的do_POST方法在服務器上運行,而不是在客戶端上,因此設置代表<input>控件的服務器端對象的值。您的context.Request.Form["requestData"]從POST請求中提交的客戶端數據獲取該字段的值,該值始終未設置,因此它爲空。

如果你想onClick是一個客戶端功能,那麼你需要做一點不同。使用OnClientClick屬性(而不是onClick)。然後創建一個javascript方法來設置字段值:

<asp:Button ID="btnPOST" Text="POST" runat="server" OnClientClick="do_POST" /> 

<script> 
    function do_POST() { 
    document.getElementById("requestData").value = "FOO!"; 
    } 
</script> 
+0

沒有JS的情況下做什麼? – user252816 2010-02-17 12:48:45

+0

獲取隱藏輸入字段值的唯一方法是使用javascript,或者在頁面創建時將其放置在服務器端。 – Ray 2010-02-17 13:04:11

+0

如果我在另一個領域(其他隱藏的輸入)通過了該怎麼辦?我可以使用另一個傳遞表單中的數據嗎? – user252816 2010-02-17 13:08:18

1

我試過了你的代碼,並沒有做任何修改。

  1. 變化requestDataField.Text = "FOO!";requestData.Value = "FOO";

  2. 而且我添加了兩個按鈕。一個用於do_POST函數,UseSubmitBehaviour屬性設置爲False。另一個是提交表格。

如果你想在客戶端設置它,那麼你將不得不使用Javascript。

1

使用 「價值」,而不是 「文本」 屬性HtmlInputHidden控制:

requestDataField.Value = 「FOO!」;的

代替

requestDataField.Text = 「FOO!」;