如何使用带有 '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.0a2 和 Opera 35.0 中,请求的 url 看起来像这样:
http://localhost/App/Controller/Action?a=True&b=123&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())
进行编码
在 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.0a2 和 Opera 35.0 中,请求的 url 看起来像这样:
http://localhost/App/Controller/Action?a=True&b=123&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())