使用浏览器发出传递查询字符串

Issue passing query string with browsers

我目前正在确保构建并主要 运行 使用 IE11 的旧 MVC4 站点适用于其他浏览器。我们测试的第一个是 Edge Chromium,但我们遇到了弹出窗口的问题。

弹出窗口发生时,我们传递一个查询字符串,如下所示:

http://localhost/Gen/DataExport?cntId=100&InitialLoad=True&showProgress=False&startExport=False

哪里

回到控制器代码,我们有一个 HttpGet 方法来加载页面。该方法接收 cntIdInitialLoadshowProgressstartExport.

使用 IE11 时一切正常。传入的参数到达并正确读取。

但是,我们发现的问题是当 Edge Chromium、Chrome 和 Firefox 尝试加载页面时,查询字符串包含不正确的数据。

每个浏览器都显示 cntId100,但 InitialLoad 由于某种原因是 false .

我很困惑为什么这个页面没有正确传递参数,而其他所有页面都可以。可能是因为系统正在打开一个新的 window,但我不确定。

编辑:

由于有些人看不懂我的问题以及该问题的标签,因此我将在这里更加明确。

这是一个 MVC4 应用程序,在后端使用 C# 并连接到 Oracle 数据库。这是一个由政府实体使用的项目,该实体仍在使用 IE11。

IE11 的支持将于 8 月结束。显然,上述政府实体仍需要使用此 MVC4 应用程序。因此,为什么我要尝试确保它在 Edge(Chromium 版本)、Chrome、Firefox 和 Safari 中正常工作。

废话不多说了,现在来看我的代码示例。我有一个带有 link 的视图。 link 调用一个 Javascript 函数,该函数继续打开一个弹出窗口 window。代码如下:

function OpenGen() {
    var url = '@Url.Action("DataExport", "Gen", new { cntId = @Session["cntId"], InitialLoad = true, showProgress = false, startExport = false })';
    //Open the new window for the Gen
    window.open(url, "GenWindow", 'height=' + screen.height + ',width=' + screen.width + ',resizable=yes,scrollbars=yes,toolbar=no,menubar=no,location=yes');
}

点击link后,服务端在GenController中执行如下代码:

[HttpGet]
public ActionResult DataExport([Optional, DefaultParameterValue(-1)]int cntId,
        [Optional, DefaultParameterValue(false)]bool InitialLoad,
        [Optional, DefaultParameterValue(false)]bool showProgress,
        [Optional, DefaultParameterValue(false)]bool startExport)
{
    if (InitialLoad)
    {
        ...
    }
}

我正在调试 InitialLoad 的 if 语句。使用IE11时传入的参数是正确的

cntId = 100,InitialLoad = 真,showProgress = 假,startExport = 假

但是,在调试 Edge、Chrome、Firefox 和 Safari 时,我得到以下参数:

cntId = 100,InitialLoad = 假,showProgress = 假,startExport = 假

我不确定为什么 Edge、Chrome、Firefox 和 Safari 会丢失参数。四个的url和IE11的一样

话虽如此,欢迎就此问题提出任何想法。

我想通了这个问题。由于某些奇怪的原因,Edge、Chrome、Firefox 和 Safari 没有正确处理“&”。我知道 & 符号是一个被编码的值,但奇怪的是每个浏览器都无法自行解码它。当我为他们简化它时,它起作用了。

IE11 是唯一出于某种奇怪原因处理它的。

无论如何,这只是一个奇怪的问题,在打开弹出窗口时没有专门处理参数。