我目前正在确保使用 IE11 构建和运行的旧 MVC4 站点适用于其他浏览器。我们首先测试的是 Edge Chromium,但我们遇到了一个弹出窗口的问题。
当弹出窗口发生时,我们传递一个查询字符串,如下所示:
http://localhost/Gen/DataExport?cntId=100&InitialLoad=True&showProgress=False&startExport=False
在哪里
cntId
是我们的记录标识符InitialLoad
是一个真/假值,让系统知道这是用户第一次进入页面(它执行一些需要刷新页面的操作)showProgress
是一个真/假值,让系统知道显示某些操作的进度(我们在第一次加载页面时不显示)startExport
是一个真/假值,告诉系统何时导出某些数据(最初不使用)
回到 Controller 代码,我们有一个HttpGet
加载页面的方法。该方法接收cntId
、InitialLoad
、showProgress
和startExport
。
使用 IE11 时一切正常。传入的参数到达并被正确读取。
但是,我们发现的问题是当 Edge Chromium、Chrome 和 Firefox 尝试加载页面时,查询字符串到达时带有不正确的数据。
每个浏览器都显示cntId
为100,但由于某种原因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的一样。
现在,话虽如此,任何关于这个问题的想法都会受到欢迎。