在Asp.net開發中,所有html控件的值都是可以在服務器端用后台代碼的Request[name]來獲取其值的。但如果有多個相同name的Html控件提交到后台,怎么分別取各個控件的值呢?而多數情況下這些控件的個數是不定的。
例如在填寫簡歷表單中,“工作經歷”這項內容是可以讓用戶動態增加的,可能有的用戶有3條工作經歷,有的用戶有5條工作經歷。當然,我們討論這個問題的前提是由用戶動態增加后一起提交到服務器,而不是采用增加一條提交一條的方式。例如:
當用戶點“添加”時就通過Javascript動態生成元素插入到document里,而這些添加的元素都保持name統一。我們可以把問題簡化一下,例如以下代碼submit到服務器后在后台如何獲取name為“txt”的textbox的數量以及如何獲取各自的值:
<input type=”text” name=”txt” >
<input type=”text” name=”txt” >
<input type=”text” name=”txt” >
……
一開始想到的是用Request[“txt”]、Request.Form[“txt”]以及Request.Params[“txt”],這些都將返回所有name為“txt”的元素的值,並用逗號分隔,例如返回 “aaa,bbb,ccc” ,這表示這三個textbox的值分別是aaa,bbb和ccc。但是如果用戶在某個控件里輸入的值就包含逗號本身,那就麻煩了。
最好的解決方法就是用我以前沒有太注意過的方法Request.Params.GetValues( string name)。它返回的是一個數組,所以就不用擔心逗號的問題了。例如這個例子中就可以用這個方法:
string[] txtArr = Request.Params.GetValues("txt");
這下就可以通過txtArr.length來獲知有多少個name為“txt”的控件了,並能很方便的遍歷各個控件的值。
http://www.cnblogs.com/qguohog/archive/2009/10/29/1592450.html
Request 分別獲取具有相同 name 屬性表單元素值
<form method="post" action=""> <input name="txtName" id="txtFirstName" type="text" /> <input name="txtName" id="txtMiddleName" type="text" /> <input name="txtName" id="txtLastName" type="text" /> </form>
服務器端讀取的常規做法是:
string name = Request.Params["txtName"];
得到的將是一串以逗號分割的字符串,當然你可以手動分割:
string[] nameParts = name.Split(’,’);
但是當每個 input 輸入可能包含逗號的時候,通過逗號分割就會是錯的。
如何解決?
string[] nameParts = Request.Params.GetValues("txtName"); string firstName = nameParts[0]; string middleName = nameParts[1]; string lastName = nameParts[2];
以上用法對於 GET/POST 方式提交都是適用的。
值得注意的是,用來存儲 QueryString/Form/ServerVariables 的對象是 System.Collections.Specialized.NameValueCollection, 這是 Key/Value 型對象,它的特殊性在於,一個Key下可存儲多個 Value。