2012-08-08 68 views
0

名單這是HTML:獲取輸入

<input type="text" value="Google" name="Projects[0]" /> 
<input type="text" value="Microsoft" name="Projects[1]" /> 
<input type="text" value="Microsoft" name="Projects[2]" /> 

這也有一個ASPX提交按鈕。

<asp:Button ID="submitBtn" Text="Save" runat="server" OnClick="SubmitButton_Click" /> 

--- C#-----------

protected void SubmitButton_Click(object sender, EventArgs e) 
    {    
     List<string> projectsInCSharp = new List<string>(); 
     projectsInCSharp.Add(Request["Projects[0]"]); //Google 
     projectsInCSharp.Add(Request["Projects[1]"]); //Microsoft 

    } 

有沒有更好的方式來做到這一點,在列表中會自動綁定。例如在ASP.NET MVC中,你可以做到這一點。不過,我正在使用WebForms,因此我無法切換到MVC。

我正在使用.NET 4.0,C#,ASPX。

+0

你的手怎麼才知道你需要創建多個html輸入文本? – HatSoft 2012-08-08 11:08:44

+1

它的動態。我把它作爲一個列表來處理任何數量的輸入。它應該適用於任何數字,對吧? – Rajesh 2012-08-08 11:10:30

+0

如果它是一個列表,那麼你將能夠得到它的計數是正確的? – HatSoft 2012-08-08 11:11:47

回答

5

試試這個代碼,你可以用它代替調用多次添加的AddRange:

 List<string> projectsInCSharp = new List<string>(); 
     projectsInCSharp.AddRange(Request.Params 
      .Cast<string>() 
      .Where(o => o.StartsWith("Projects[")) 
      .OrderBy(o => int.Parse(o.Remove(o.Length - 1, 1).Remove(0, 9))) 
      .Select(o => Request.Params[o]) 
      ); 

或者你可以把它放在一個構造函數:

 List<string> projectsInCSharp = new List<string>(
      Request.Params 
       .Cast<string>() 
       .Where(o => o.StartsWith("Projects[")) 
       .OrderBy(o => int.Parse(o.Remove(o.Length - 1, 1).Remove(0, 9))) 
       .Select(o => Request.Params[o]) 
      ); 
+0

這看起來不錯。我唯一的意見是,它會使用字符串排序,因此它會將它們排序爲「項目[1]」,「項目[10]」,「項目[2]」......除此之外,這是一個很好的答案。 :) – Chris 2012-08-08 11:23:55

+0

謝謝:) 這就是我在這個時候尋找:) 偉大的人..很酷。 – Rajesh 2012-08-08 11:26:04

+0

@Chris謝謝克里斯,你注意到排序問題非常好:) – 2012-08-08 11:28:40

5

這是一個怪異的解決方法,但你可以做的是使用事實,即瀏覽器將逗號分隔具有相同name屬性的帖子字段。

,即通過改變你的aspx到:

<input type="text" value="Google" name="Project" /> 
<input type="text" value="Microsoft" name="Project" /> 
<input type="text" value="Oracle" name="Project" /> 

然後,您可以做一個襯在後面的代碼:

List<string> projectsInCSharp = Request["Project"].Split(',').ToList(); 
+0

感謝nonnb這個答案,但是,我不想用逗號分隔。我之前用逗號問題。 這很好,有沒有更好的解決方案。 :) – Rajesh 2012-08-08 11:21:39

+0

我已經upvoted伊萬G的答案 - 它比我更少hacky :) – StuartLC 2012-08-08 11:23:58

+0

我已upvoted你的答案以及因爲它也有幫助,當你使用逗號分隔的東西。 :) 謝謝你的努力。 – Rajesh 2012-08-08 11:27:41

0

我的建議是與輸入文本框沿也通過計入隱藏字段

<input type="hidden" name="textBoxCount" value="10" /> //you will need to pass it 

因此,我們知道文本框的計數

protected void SubmitButton_Click(object sender, EventArgs e) 
{ 
    List<string> projectsInCSharp = new List<string>(); 
    int count = Convert.ToInt32(Request["textBoxCount"]); 
    for(int i = 1; i <= count; i++) 
    { 
     if(Request["Projects[" + i + "]"] != null) 
     { 
     projectsInCSharp.Add(Request["Projects[" + i + "]"]); 
     } 
    } 
} 
+0

感謝您的努力帽子:)。 – Rajesh 2012-08-08 12:01:16