使用C#迭代具有相同名称的表单字段

时间:2010-04-05 21:01:02

标签: c# asp.net forms request webforms

我有一个表单的一部分,我需要处理不同于其他表单结果。在需要特殊处理的部分中,我需要迭代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.

我应该如何处理具有相同名称的表单字段?

4 个答案:

答案 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属性。