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,分别与 Dept
和 Group
相关table秒。每个 Group
也有一个 DeptID
字段。
在一个特定页面上,用于编辑所选软件应用程序的详细信息,非post返回请求(例如,http://localhost/admin/app/edit.aspx?id=guid-here
)将导致调用数据库以填充字段数据页面。
简而言之,ASP.net 运行时 Page_Load
事件执行以下操作:
- 确保此加载 不是 回发
- 验证查询字符串中是否提供了
id
参数
- 填充
ddlDept
DropdownList
中的选项(呈现为 HTML select
元素)来自 Dept
table
- 从 DB 的 App 记录中提取与
id
匹配的所有字段到 DataSet
- 从
Group
table 中填充 ddlGroup
DropdownList
(另一个 select
)中的选项,匹配从 DeptID
中提取的 DeptID
App
数据集
- 填充来自
App
数据集的所有表单域的数据
重要提示: 当您单击 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。
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,分别与 Dept
和 Group
相关table秒。每个 Group
也有一个 DeptID
字段。
在一个特定页面上,用于编辑所选软件应用程序的详细信息,非post返回请求(例如,http://localhost/admin/app/edit.aspx?id=guid-here
)将导致调用数据库以填充字段数据页面。
简而言之,ASP.net 运行时 Page_Load
事件执行以下操作:
- 确保此加载 不是 回发
- 验证查询字符串中是否提供了
id
参数- 填充
ddlDept
DropdownList
中的选项(呈现为 HTMLselect
元素)来自Dept
table - 从 DB 的 App 记录中提取与
id
匹配的所有字段到DataSet
- 从
Group
table 中填充ddlGroup
DropdownList
(另一个select
)中的选项,匹配从DeptID
中提取的DeptID
App
数据集 - 填充来自
App
数据集的所有表单域的数据
- 填充
- 验证查询字符串中是否提供了
重要提示: 当您单击 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。