如何使用带有 'Url.Action' 的查询字符串正确创建 url 以便它在 Firefox 中工作

How to create url with query string with 'Url.Action' correctly so it works in Firefox

在 razor 视图中 script 一个带有查询字符串的 url 是这样创建的,当点击某个元素时 window.location 被设置为带有查询字符串的 url .

<script type="text/javascript">

// ...

var url = "@Url.Action("action", "controller", 
    new
    {
        a = model.a,
        b = model.b,
        c = model.c
    }, null)";

$("#something").on("click", function () {   
    window.location = url;
});

// ...

</script>

这在 Internet Explorer 11 中工作正常,请求的 url 看起来像这样:

http://localhost/App/Controller/Action?a=True&b=123&c=False

但在 Firefox 47.0a2Opera 35.0 中,请求的 url 看起来像这样:

http://localhost/App/Controller/Action?a=True&amp;b=123&amp;c=False

注意查询字符串中每个 & 之后的 amp;amp;s 导致模型绑定在 Firefox 和 Opera 中失败(模型在 IE 11 中绑定时没有错误)。

为什么 Firefox 和 Opera 的行为与 IE 不同?


错误如下所示:

The parameters dictionary contains a null entry for parameter 'a' of non-nullable type 'type' for method 'method' in 'controller'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parametername: parameters

MVC 将对 @Url.Action 进行编码。您可以简单地告诉它不要使用 @Html.Raw(Url.Action())

进行编码