如何正确创建带有“Url.Action”的查询字符串的网址,以便它在Firefox中工作

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

本文关键字:工作 Firefox 查询 创建 何正确 Url Action 字符串      更新时间:2023-09-26

在 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;会导致模型绑定在 Firefox 和 Opera 中失败(模型在 IE 11 中绑定时没有错误)。

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


错误如下所示:

参数

字典包含参数"a"的空条目 "控制器"中方法"方法的不可为空类型"类型"。可选参数必须是引用 类型、可为 null 的类型,或声明为可选参数。 参数名称:参数

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