在一些测试中,我发现在Apache服务器上表单POST阵列需要与IIS服务器上的阵列不同。例如
Apache:
<form method="post">
<input type="hidden" name="a[]" value="asd" />
<input type="hidden" name="a[]" value="cvbcv" />
<input type="submit" name="b" value="Submit" />
</form>
使用MVC3框架的IIS:
<form method="post">
<input type="hidden" name="a" value="asd" />
<input type="hidden" name="a" value="cvbcv" />
<input type="submit" name="b" value="Submit" />
</form>
对于长度为2的名为a
的数组,两者都给出了相同的结果。在堆叠过程中的什么时候进行评估?网络服务器、浏览器等
注意:在每台服务器上使用相反的表示法都无法生成数组。
这可能是浏览器问题。我刚刚在IE 9和Chrome中尝试了这个代码。
<form action="@Url.Action("Index", "Default")" method="post">
<input type="hidden" name="vals[]" value="1"/>
<input type="hidden" name="vals[]" value="2"/>
<input type="submit" name="button" value="Go" />
</form>
和控制器
[HttpPost]
public ActionResult Index(string button, string[] vals)
{
return null;
}
在Chrome中,vals是一个长度为1的数组,唯一的值是1
在IE9中,vals为null
MVC肯定支持数组,但是您应该指定[0]、[1]、[2]这是一个功能web服务器和开发语言。它们可以分别进行解析。PHP的解析方式似乎与ASP.NET不同,但如果你使用"相反"的表示法,你真的应该有数字,所以MVC在这一点上正确地构建了模型(假设你使用的是MVC模型绑定——在这种情况下,它是MVC的一个函数)。
因此,为了回答这个问题,它是处理平台的一个功能,通常超出了你关心它的服务器。如果你直接引用头,那是一回事,如果不是,那就是平台语言/技术(即asp.net或php)
它不应该是浏览器。