【问题标题】:HTML Select Not Showing Selected Option After Refresh in FirefoxHTML选择在Firefox中刷新后不显示选定的选项
【发布时间】: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,它们是与各自的 DeptGroup 表相关的 GUID。每个Group 也有一个DeptID 字段。

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

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

  • 确保此加载不是回发
    • 验证查询字符串中是否提供了id 参数
      • Dept 表中填充ddlDept DropdownList 中的选项(呈现为HTML select 元素)
      • 将应用记录中与id匹配的所有字段从数据库中提取到DataSet
      • Group 表中填充ddlGroup DropdownList(另一个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


    【解决方案1】:

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

    autocomplete="off" 添加到有问题的选择中(aspx 标记中的DropDownList)可以神奇地防止Firefox 弄乱选择中显示的元素,因此始终显示标记为selected="selected" 的正确元素.

    从现在开始,我已将其添加(并将添加)到我的所有 DropDownLists / 选择中...感谢 Firefox。

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      相关资源
      最近更新 更多