我需要服用:
<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# 无法处理多维混合类型数组