0

我需要服用:

<input type="text" name="option[0]['value']" value="test@email.com"/>
<input type="hidden" name="option[0]['option_key']" value="email_from" />

<input type="checkbox" name="option[1]['value']" value="1" checked="checked"/>
<input type="hidden" name="option[1]['option_key']" value="email_asHtml" />

从表单中访问这些值以将其作为类型化对象。我一直试图让它运行。我所做的是加载,FastMember帮助完成工作,但我什至可以通过抛出的错误

将参数“选项”转换为 System.Collections.Object[] 时出现异常。检查内部异常以获取详细信息

public void save_config(dynamic[,] option)
{
    site.options.Clear();
    foreach (Hashtable item in option)
    {
        options tmp = new options();
        var accessor = TypeAccessor.Create(tmp.GetType());
        foreach (string key in item.Keys)
        {
            accessor[tmp, key] = item[key];
        }
        site.options.Add(tmp);
    }

    ActiveRecordMediator<site>.Save(site);
    RedirectToAction("configuration");
}

我的一个想法是我可以跳过参数,这样我就不会收到绑定错误并使用以下方法调用参数:

HttpContext.Current.Request.Form["option"];

但是如何打破它是未知的。

这里的问题是如何像在 php.ini 中一样使用多维数组发布数据值。

---更新---所以解释为什么在评论中这不只是被注销为“你不知道你在做什么”的评论风格(不是一个不好的原因,就像我一样拿了它),我确实想到了一个可能会更好的新回合。(看到他们非常有帮助:D)

因此,我不会像我一样发送帖子数据,而是删除 muiltde 并设置一个简单的数组,这样我就可以使用我在评论中列出的相同技巧。在我尝试像这样发送数据之前。

option[0]['value'] = usedev
option[0]['option_key'] = email_from
option[1]['value'] = 1
option[1]['option_key'] = asfasf

如果我只是使用键来连接我需要的两个值,那么我可以获得“值”的长度,然后用 var i++ 循环它并获得我需要的值。很简单,您只需要将数据移动到此模式:

option_key[0]   usedev
option_key[1]   email_from
value[0]    1
value[1]    asfasf

然后在循环中调用它会很好

string value = HttpContext.Current.Request.Form["value[" + i+ "]"];
string option_key= HttpContext.Current.Request.Form["option_key[" + i+ "]"];
i++;

那么一切都会好起来的。完成后我会发布最终解决方案。

--第二次更新--

因此,从多维数组中展平并使用数组键作为绑定,就好像它是一个多维数组一样,可以让您获取值。交易是如果 i 不是迭代值会更好。这就是我所拥有的。我相信

    public void save_config(
            [ARDataBind("site", Validate = true, AutoLoad = AutoLoadBehavior.NewRootInstanceIfInvalidKey)] site site,
        String[] value,
        String[] option_key
        ) {
        site.options.Clear();
        int i = 0;
        foreach (String item in value) {

            options tmp = new options(){
                value = item,
                option_key = option_key[i]
            };
            i++;
            site.options.Add(tmp);
        }
        ActiveRecordMediator<site>.Save(site);
        RedirectToAction("configuration");
    }

我相信答案是 C# 无法处理多维混合类型数组

4

0 回答 0