C# 获取输入的列表
这是html: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
<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])
);