HTML 选择在 Firefox 中刷新后不显示所选选项

Dav*_*ini 4 vb.net asp.net firefox html-select

TL,DR: Firefox(Firefox)无法在页面完全刷新时显示select标记为 的右侧子元素,即使它在 DOM 中是正确的(但仅在某些条件下)。selected="selected"

\n

(我不相信这是HTML select 的重复,在 DOM 中选择了正确的选项,但在 firefox 中显示了错误的项目,因为我没有使用ember.js。)

\n
\n

背景

\n

我正在 ASP.NET WebForms 中构建“软件管理/更新服务器”。它存储应用程序的主副本,并通过简单的 API 提供下载和更新。每个应用程序(或在代码中称为“应用程序”)都有 aDeptID和 a ,它们是 GUID,与各自的和表GroupID相关。各有田地也。DeptGroupGroupDeptID

\n

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

\n

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

\n
    \n
  • 确保此加载不是回发\n
      \n
    • 验证id查询字符串中是否提供了参数\n
        \n
      • 填充表中的选项ddlDept DropdownList(呈现为 HTMLselect元素)Dept
      • \n
      • 将应用程序记录中的所有字段从数据库中提取到匹配idDataSet
      • \n
      • ddlGroup DropdownList填充表中(另一个select)中的选项Group,与DeptIDApp数据集中提取的选项相匹配
      • \n
      • App填充数据集中所有表单字段的数据
      • \n
      \n
    • \n
    \n
  • \n
\n

需要注意的重要事项:当您单击 时Save,页面将回发到服务器,并将字段数据转储到数据库中。如果保存操作成功,浏览器将被指示使用重定向到当前页面的 URLResponse.Redirect(Request.Url.ToString),从而导致页面的“干净加载”(非回发加载)。

\n
\n

预期行为:

\n

成功保存页面后,按 F5 或单击刷新应会导致页面再次干净加载(非回发),并且应填充所有字段,就像直接在页面上点击 URL 一样。

\n
\n

实际行为:

\n

成功保存页面后,按 F5 或单击刷新会以非回发方式重新加载页面(在 VS 调试中验证),但 select 元素ddlGroup呈现“默认”/第一项(“选择一个”)而不是该项目selected="selected"在 DOM 中标记。

\n

我已经单步执行了debug \xe2\x80\x94 中的每一行VB 代码,当服务器在“保存后”和所谓的“干净”加载之后发回页面时,ddlGroup代码中的值始终是正确的门。只有在浏览器中,特别是在 Firefox 中,显示的值才会设置为错误的项目,即使它在 DOM 中是正确的。再次刷新根本没有帮助。当我尝试再次保存时,RequiredField 验证器ddlGroup抱怨该字段无效,尽管它在 DOM 中应该是正确的。

\n

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

\n

想法?

\n

Dav*_*ini 5

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

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

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