C# 获取输入的列表

C# 获取输入的列表,c#,asp.net,.net,.net-4.0,webforms,C#,Asp.net,.net,.net 4.0,Webforms,这是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" T

这是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" />

---#-----------

protectedvoid SubmitButton_单击(对象发送方,事件参数e)
{            
List projectsInCSharp=新列表();
projectsInCSharp.Add(请求[“项目[0]”];//谷歌
projectsInCSharp.Add(请求[“项目[1]”];//Microsoft
}
有没有更好的方法可以自动将其绑定到列表中。例如,在ASP.NET MVC中,您可以这样做。然而,我正在使用WebForms,我不能仅仅为了这个而切换到MVC


我使用的是.NET 4.0、C#、ASPX。

这是一个很难解决的问题,但您可以使用浏览器将逗号分隔具有相同
名称
属性的帖子字段这一事实

i、 e.将您的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();
List projectsInCSharp=Request[“Project”].Split(',).ToList();

我的建议是,除了输入文本框外,您还可以在隐藏字段中传递计数

<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 + "]"]);
      }
  }
}
protectedvoid SubmitButton_单击(对象发送方,事件参数e)
{  
List projectsInCSharp=新列表();
int count=Convert.ToInt32(请求[“textBoxCount”]);

对于(int i=1;i请尝试以下代码,您可以使用AddRange而不是多次调用Add:

        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 projectsInCSharp=new List();
projectsInCSharp.AddRange(Request.Params
.Cast()
其中(o=>o.StartsWith(“项目[”))
.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])
            );
List projectsInCSharp=新列表(
请求参数
.Cast()
其中(o=>o.StartsWith(“项目[”))
.OrderBy(o=>int.Parse(o.Remove(o.Length-1,1).Remove(0,9)))
.Select(o=>Request.Params[o])
);

你事先知道需要创建多少html输入文本吗?它是动态的。我制作了一个列表来处理任意数量的输入。它应该可以处理任意数量的输入,对吗?如果它是一个列表,那么你就可以得到正确的计数了?嗯,是的,我应该能够得到一个计数。这就是我在c中尝试做的:):将其放入列表。一旦它自动保存到列表中,我的任务就完成了。(在客户端/浏览器中,html由Javascript动态生成。)感谢nonnb给出的这个答案,但是,我不想用逗号划界。我以前在使用逗号时遇到过问题。这很好,有更好的解决方案吗。:)我对Ivan G的答案投了更高的票-比我的答案要简单一些:)我也对你的答案投了更高的票,因为当你使用逗号分隔的东西时,它也很有帮助。:)谢谢你的回答这看起来很不错。我唯一的意见是它将使用字符串排序,以便将它们排序为
项目[1]
项目[10]
项目[2]
…除此之外,这是一个很好的答案。:)谢谢:)这是我此刻正在寻找的:)伟人..酷。@Chris谢谢Chris,你很好地注意到了排序问题:)@Rajesh不客气,我修复了排序,因此它根据
项目[I]中的索引
I
对列表进行排序
而不是按字母顺序排序。当然,如果您不需要对该列表进行排序,可以省略
OrderBy
方法。感谢您的努力:)。
        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])
            );