这是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 :(得分: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 + "]"]);
}
}
}