2008-12-23 58 views
29

我有一個基本的HTML表單,根據數據庫中存在多少記錄插入到服務器端div標記中。這個HTML表格出來就很好,而且一切都很好。但在我的操作頁面上,我似乎無法從後面的代碼中訪問輸入元素。我嘗試過使用Request範圍,但在這種方法上已經空了。還有其他建議嗎?如何從後面的asp.net代碼訪問HTML表單輸入

以下所有建議都很棒,通常我會這麼做。但是這些表單是在頁面編譯完成後立即構建的,所以runat ='server'對我沒有任何幫助。它只是將它傳遞給html頁面。

回答

57

如果您正在訪問純HTML表單,它必須通過提交按鈕(或通過javascript post)提交給服務器。這通常意味着你的表單定義看起來就像這樣(我會關閉內存,請務必檢查HTML元素是正確的):

<form method="POST" action="page.aspx"> 

<input id="customerName" name="customerName" type="Text" /> 
<input id="customerPhone" name="customerPhone" type="Text" /> 
<input value="Save" type="Submit" /> 

</form> 

您應該能夠訪問客戶名稱和customerPhone數據,如這樣的:

string n = String.Format("{0}", Request.Form["customerName"]); 

如果你在表單method="GET"(不推薦,它攪亂了你的URL空間),你將不得不像這樣訪問表單數據:

string n = String.Format("{0}", Request.QueryString["customerName"]); 

這當然只有在表單被「發佈」,「提交」或通過「回傳」完成時才能起作用。 (即有人點擊了「保存」按鈕,或通過javascript以編程方式完成)。

另外,請記住,只有當您不使用服務器控件(例如runat="server")才能以這種方式訪問​​這些元素, ,與服務器控件的ID和名稱是不同的。

9

通常應該使用Request.Form["elementName"]

例如,如果您有<input type="text" name="email" />,則可以使用Request.Form["email"]來訪問其值。

-1

編輯:想到別的東西。

你說你正在動態創建一個表單 - 你真的是指一個<表格>及其內容'導致asp.net在一個頁面上的多個表單問題,它已經爲你創建一個uberform。

2

最簡單的方法是將IMO和runat服務器標籤包含在所有元素中。

<div id="MYDIV" runat="server" /> 

因爲聽起來像這些是動態插入的控件,所以您可能會喜歡FindControl()。

+0

好主意,但它聽起來像他插入純HTML;不是動態的控制,所以runat屬性將永遠不會得到處理 – rizzle 2008-12-23 15:38:38

+0

這一權利是我的問題的癥結所在,runat屬性永遠不會被編譯,所以我不能正確地訪問它們。 – 2008-12-23 16:12:36

21

我猜測是你需要將這些輸入元素設置爲runat =「server」

所以,你將無法訪問控制

<input type="text" name="email" id="myTextBox" /> 

但是,你就可以用

<input type="text" name="email" id="myTextBox" runat="server" /> 

工作,並從中讀取使用

string myStringFromTheInput = myTextBox.Value; 
+1

我得到`{}控制在當前context`沒有發現,當我做到這一點... – Si8 2014-07-21 16:10:09

0

由於您使用的是asp.net代碼隱藏功能,因此請將ID添加到元素和runat = server。

然後,您可以引用後面的代碼中的對象。

相關問題