You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过索引和键名遍历FormCollection以获取对应值

遍历FormCollection实现方案

问题根因

FormCollection是一维键值集合,你所见的form[0][keyA]是完整的字符串键名,并非二维数组结构,直接使用数字作为第一维索引会触发字符串转int的类型错误。

可行实现方案

方案1:正则分组遍历(推荐)

通过正则提取键中的序号和字段名,按序号分组后遍历取值,兼容性更强:

using System.Linq;
using System.Text.RegularExpressions;

// 匹配键结构,提取序号和字段名
var keyRegex = new Regex(@"form\[(\d+)\]\[(\w+)\]");
// 按序号分组所有有效键值对
var formItemGroups = form.AllKeys
    .Select(key => 
    {
        var matchResult = keyRegex.Match(key);
        if (!matchResult.Success) return null;
        return new 
        {
            Index = int.Parse(matchResult.Groups[1].Value),
            FieldName = matchResult.Groups[2].Value,
            FieldValue = form[key]
        };
    })
    .Where(item => item != null)
    .GroupBy(item => item.Index)
    .OrderBy(group => group.Key);

// 遍历每个分组对应单组表单数据
foreach (var itemGroup in formItemGroups)
{
    var keyA = itemGroup.FirstOrDefault(f => f.FieldName == "keyA")?.FieldValue;
    var keyB = itemGroup.FirstOrDefault(f => f.FieldName == "keyB")?.FieldValue;
    var keyC = itemGroup.FirstOrDefault(f => f.FieldName == "keyC")?.FieldValue;
    
    // 此处编写业务处理逻辑
}

方案2:直接拼接键名遍历

无需正则,直接按序号拼接完整键名取值,逻辑更简单:

// 先计算表单组最大序号
int maxFormIndex = -1;
foreach (var key in form.AllKeys)
{
    if (key.StartsWith("form["))
    {
        var indexEndPos = key.IndexOf("]", StringComparison.Ordinal);
        if (indexEndPos > 5 && int.TryParse(key.Substring(5, indexEndPos - 5), out int currentIndex))
        {
            maxFormIndex = currentIndex > maxFormIndex ? currentIndex : maxFormIndex;
        }
    }
}

// 循环拼接键名取值
for (int i = 0; i <= maxFormIndex; i++)
{
    var keyA = form[$"form[{i}][keyA]"];
    var keyB = form[$"form[{i}][keyB]"];
    var keyC = form[$"form[{i}][keyC]"];
    
    // 此处编写业务处理逻辑
}

注意事项

  • 若实际键名前缀不是form,可自行修改匹配规则或拼接规则
  • 取值后建议增加空值判断,避免部分字段未提交导致的空引用异常

内容的提问来源于stack exchange,提问作者jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:00:00