2012-08-08 69 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