【问题标题】:Using C# to iterate form fields with same name使用 C# 迭代具有相同名称的表单字段
【发布时间】:2011-02-04 14:04:58
【问题描述】:

我需要以不同于其他表单结果的方式处理表单的一部分。在需要特殊处理的部分中,我需要遍历 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.

我应该如何处理同名的表单域?

【问题讨论】:

    标签: c# asp.net forms request webforms


    【解决方案1】:

    Request.Form["Color"] 为空,或者在 aspx 页面上找不到 colorName。根据您的代码,我无法判断哪个。否则,它看起来是正确的。什么类型的 html 元素是“颜色”?如果它只是一个 html 元素,请确保它具有 id 和 name 属性。

    【讨论】:

    • 除非您正在编写客户端脚本,否则不需要 ID。
    • 这不是它失败的原因。 i &lt;= Request.Form["Color"][i] 是错误的(int
    【解决方案2】:

    我建议将每个表单添加到列表中并改用 ForEach 运算符,尽管它比您已经尝试做的要冗长一些。

    例如

    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 是表单本身的类名。

    我自己没有测试过,所以可能会有一些错误,希望它在一定程度上有所帮助。

    【讨论】:

      【解决方案3】:

      重要的是要记住,发布的表单值只不过是一个名称/值集合,其中值是一个简单的字符串。因此,拥有多个具有相同名称的表单字段没有多大意义。我什至不知道它是否真的被允许。

      但正如你所说,你无法改变这一点。我在 IE 和 Chrome 中进行了快速测试,至少在这些浏览器中,它们似乎发送了多个同名的表单字段作为逗号分隔的字符串。您可能需要进行更多测试,以确保此行为在浏览器之间保持一致。

      考虑到这一点,你可以说:

      string colorValues = Request.Form["Color"];
      string [] colors = colorValues.Split(',');
      

      colors 数组中的每个元素现在都对应于发布的每个输入元素的值。

      【讨论】:

        【解决方案4】:

        你不需要做任何分裂或其他特殊魔法;您可以简单地从 ASP.NET 获取一个字符串数组:

        string[] values = Request.Form.GetValues("Color");

        【讨论】:

        • 并且不要忘记在使用“值”之前进行空检查:)
        猜你喜欢
        • 1970-01-01
        • 2018-06-26
        • 2011-01-13
        • 2016-06-02
        • 2022-07-11
        • 2016-08-25
        • 2017-02-28
        • 2016-09-28
        • 2017-03-03
        相关资源
        最近更新 更多