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。

4

3 回答 3

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

然后,您可以在您的代码背后做一个衬里:

List<string> projectsInCSharp = Request["Project"].Split(',').ToList();
于 2012-08-08T11:17:37.163 回答
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])
            );
于 2012-08-08T11:20:10.127 回答
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 + "]"]);
      }
  }
}
于 2012-08-08T11:19:45.467 回答