我有一个表单的一部分,我需要处理不同于其他表单结果。在需要特殊处理的部分中,我需要迭代3个具有相同名称的表单字段。它们必须具有相同的名称,我无法改变它。我所指的表格部分看起来像这样:
<td><input name="Color" size="20" value="" type="text"></td>
<td><input name="Color" size="20" value="" type="text"></td>
<td><input name="Color" size="20" value="" type="text"></td>
使用C#我尝试这样的事情:
我试着像这样处理它:
int i;
for (i = 1; i <= Request.Form["Color"][i]; i++)
{
colorName.Text += Request.Form["Color"];
}
导致以下异常:
System.NullReferenceException: Object reference not set to an instance of an object.
我应该如何处理具有相同名称的表单字段?
答案 0 :(得分:12)
你不需要做任何分裂或其他特殊魔法;你可以从ASP.NET获得一个字符串数组:
string [] values = Request.Form.GetValues(“Color”);
答案 1 :(得分:0)
我建议将每个表单添加到列表中并使用ForEach运算符,尽管它比您已经尝试过的更加冗长。
e.g。
private List<Request.Form> newList = new List<Request.Form>();
newList.Add(FormName1);
newList.Add(FormName2);
newList.Add(FormName3);
foreach(Request.Form form in newList)
{
//perform logic
}
注意:我假设Request.Form是表单本身的类名。
我自己没有对此进行过测试,因此可能会出现一些错误,希望无论如何都有帮助。
答案 2 :(得分:0)
重要的是要记住,发布的表单值只不过是名称/值集合,其中值是一个简单的字符串。因此,具有相同名称的多个表单字段没有多大意义。我甚至不知道它是否真的被允许。
但正如你所说,你不能改变它。我在IE和Chrome中进行了快速测试,至少在这些浏览器中,它们似乎发送了多个与逗号分隔的字符串同名的表单字段。您可能希望进行更多测试,以确保此行为在浏览器中保持一致。
考虑到这一点,你可以说:
string colorValues = Request.Form["Color"];
string [] colors = colorValues.Split(',');
colors数组中的每个元素现在都对应于已发布的每个输入元素的值。
答案 3 :(得分:-1)
Request.Form [“Color”]为null,或者在aspx页面上找不到colorName。根据你的代码,我无法分辨出哪个。否则,看起来是正确的。什么类型的html元素是“颜色?”如果它只是一个html元素,请确保您同时具有id和name属性。