HTML Select 在 Firefox 中刷新后不显示 Selected 选项

HTML Select Not Showing Selected Option After Refresh in Firefox

TL,DR: Firefox(和 only Firefox)无法显示正确的 select 子元素,如标记为selected="selected" 完全刷新页面后,即使它在 DOM 中是正确的(但仅在特定条件下)。

(我不认为这是 HTML select, correct option selected in DOM, but wrong item shown in firefox 的副本,因为我 不是 使用 ember.js。)


背景

我正在 ASP.NET WebForms 中构建一个“软件 management/update 服务器”。它存储应用程序的主副本,并通过简单的 API 提供下载和更新服务。每个应用程序(或代码中称为“App”)都有一个 DeptID 和一个 GroupID,它们是 GUID,分别与 DeptGroup 相关table秒。每个 Group 也有一个 DeptID 字段。

在一个特定页面上,用于编辑所选软件应用程序的详细信息,非post返回请求(例如,http://localhost/admin/app/edit.aspx?id=guid-here)将导致调用数据库以填充字段数据页面。

简而言之,ASP.net 运行时 Page_Load 事件执行以下操作:

重要提示: 当您单击 Save 时,页面会 post 返回到服务器并将字段数据转储到数据库中。如果保存操作成功,指示浏览器使用 Response.Redirect(Request.Url.ToString) 重定向到当前页面的 URL,导致“干净加载”(非 post页面的后台加载。


预期行为:

页面成功保存后,按 F5 键或单击刷新应该会导致页面另一个 干净加载(非post返回),并且所有字段应该像直接 URL 点击页面一样填充。


实际行为:

页面成功保存后,按 F5 或单击刷新重新加载页面作为非post返回(已在 VS 调试中验证),但 ddlGroup select元素呈现“默认”/第一项(“Select一个”)而不是 DOM.

中标记为 selected="selected" 的项

我已经调试了 VB 代码的每一行 — 当服务器在此“post-save 之后发回页面时" 和所谓的“干净”负载,ddlGroup 值在代码中一直是正确的。只有在浏览器中,特别是在 Firefox 中,displayed 值设置为错误的项目,即使它在 DOM 中是正确的。再次刷新根本没有帮助。当我再次尝试 save 时,ddlGroup 的 RequiredField 验证器抱怨该字段无效,尽管它再次应该在 DOM 中是正确的。

在我看来,这是一个非常严重的 Firefox 错误。

想法?

所以,这并不是我真正认为的合适“解决方案”,而是更稳定的解决方法。

autocomplete="off" 添加到有问题的 select(aspx 标记中的 DropDownList)神奇地防止 Firefox 弄乱 [=20] 中显示的元素 =],因此始终显示标记为 selected="selected".

的正确选项

从现在开始,我已经将它添加(并将添加)到我所有的 DropDownLists / selects 中...谢谢 Firefox。