【发布时间】:2021-06-18 01:25:08
【问题描述】:
TL、DR: Firefox(和仅 Firefox)在干净刷新页面时无法显示正确的select 子元素,标记为selected="selected",即使它在 DOM 中是正确的(但仅在某些条件下)。
(我不相信这是HTML select, correct option selected in DOM, but wrong item shown in firefox 的重复,因为我不使用ember.js。)
背景
我正在 ASP.NET WebForms 中构建一个“软件管理/更新服务器”。它存储应用程序的主副本,并通过简单的 API 提供下载和更新。每个应用程序(或在代码中称为“应用程序”)都有一个 DeptID 和一个 GroupID,它们是与各自的 Dept 和 Group 表相关的 GUID。每个Group 也有一个DeptID 字段。
在一个特定页面上,用于编辑所选软件应用程序的详细信息,非回发请求(例如,http://localhost/admin/app/edit.aspx?id=guid-here)将导致调用数据库以填充页面上的字段数据。
简而言之,ASP.net 运行时Page_Load 事件执行以下操作:
- 确保此加载不是回发
- 验证查询字符串中是否提供了
id参数- 从
Dept表中填充ddlDeptDropdownList中的选项(呈现为HTMLselect元素) - 将应用记录中与
id匹配的所有字段从数据库中提取到DataSet中 - 从
Group表中填充ddlGroupDropdownList(另一个select)中的选项,匹配从App数据集中提取的DeptID - 从
App数据集中填充所有表单字段的数据
- 从
- 验证查询字符串中是否提供了
重要提示:当您单击Save 时,页面将回传到服务器,并将字段数据转储到数据库中。如果保存操作成功,会指示浏览器使用Response.Redirect(Request.Url.ToString) 重定向到当前页面的 URL,从而导致页面“干净加载”(非回发加载)。
预期行为:
成功保存页面后,按 F5 或单击刷新应该会导致页面另一个干净加载(非回发),并且应该像直接 URL 命中一样填充所有字段在页面上。
实际行为:
成功保存页面后,按 F5 或单击刷新将页面重新加载为非回发(在 VS 调试中验证),但 ddlGroup 选择元素呈现“默认”/第一项(“选择一个") 而不是 DOM 中标记为 selected="selected" 的项目。
我已经在调试中逐步检查了每一行 VB 代码 — 当服务器在此“保存后”和所谓的“干净”加载之后将页面发回时,ddlGroup 值一直到门外的代码都是正确的。只有在浏览器中,并且只有在 Firefox 中,才会将 displayed 值设置为错误的项目,即使它在 DOM 中是正确的。再次刷新根本没有帮助。当我再次尝试保存时,ddlGroup 的RequiredField 验证器会抱怨该字段无效,尽管它再次被认为在 DOM 中是正确的。
在我看来这是一个非常糟糕的 Firefox 错误。
想法?
【问题讨论】:
标签: asp.net vb.net firefox html-select