获取输入列表

时间:2012-08-08 11:02:23

标签: 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" 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。

3 个答案:

答案 0 :(得分:5)

这是一个hacky解决方法,但你可以做的是使用浏览器将逗号分隔具有相同name属性的帖子字段这一事实。

即。通过将您的aspx更改为:

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

然后,您可以在Code Behind中执行一行内容:

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

答案 1 :(得分:5)

尝试使用此代码,您可以使用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<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])
            );

答案 2 :(得分:0)

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

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

所以我们知道TextBoxes的数量

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 + "]"]);
      }
  }
}