0

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

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

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

在哪里

  • cntId是我们的记录标识符
  • InitialLoad是一个真/假值,让系统知道这是用户第一次进入页面(它执行一些需要刷新页面的操作)
  • showProgress是一个真/假值,让系统知道显示某些操作的进度(我们在第一次加载页面时不显示)
  • startExport是一个真/假值,告诉系统何时导出某些数据(最初不使用)

回到 Controller 代码,我们有一个HttpGet加载页面的方法。该方法接收cntIdInitialLoadshowProgressstartExport

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

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

每个浏览器都显示cntId100,但由于某种原因InitialLoad错误的。

我不知道为什么这一页没有正确传递参数,而其他所有页面都正确传递。这可能是由于系统可能正在打开一个新窗口,但我不确定。

编辑:

我将在这里更加明确,因为有些人无法阅读我的问题以及该问题的标签。

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

IE11 的支持在 8 月用完。显然,上述政府实体仍然需要使用这个 MVC4 应用程序。因此,我试图确保它在 Edge(Chromium 版本)、Chrome、Firefox 和 Safari 中工作。

既然废话已经结束,那么就来看看我的代码示例。我有一个带有链接的视图。该链接调用一个 Javascript 函数,该函数继续打开一个弹出窗口。代码如下:

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');
}

点击链接后,服务器在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的一样。

现在,话虽如此,任何关于这个问题的想法都会受到欢迎。

4

1 回答 1

0

我弄清楚了这个问题。出于某种奇怪的原因,Edge、Chrome、Firefox 和 Safari 没有正确处理“&”。我知道 & 是一个被编码的值,但奇怪的是每个浏览器都不能自己解码它。当我为他们简化它时,它起作用了。

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

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

于 2021-05-06T16:09:43.007 回答