表单POST阵列:IIS与Apache



在一些测试中,我发现在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中,valsnull

MVC肯定支持数组,但是您应该指定[0]、[1]、[2]这是一个功能web服务器和开发语言。它们可以分别进行解析。PHP的解析方式似乎与ASP.NET不同,但如果你使用"相反"的表示法,你真的应该有数字,所以MVC在这一点上正确地构建了模型(假设你使用的是MVC模型绑定——在这种情况下,它是MVC的一个函数)。

因此,为了回答这个问题,它是处理平台的一个功能,通常超出了你关心它的服务器。如果你直接引用头,那是一回事,如果不是,那就是平台语言/技术(即asp.net或php)

它不应该是浏览器。

最新更新