【问题标题】:asp.net postback before page fully loaded cause dropdownlist to have the wrong SelectedValue页面完全加载之前的asp.net回发导致下拉列表具有错误的SelectedValue
【发布时间】:2010-10-18 19:24:10
【问题描述】:

我们偶尔会收到报告,其中 GridView 中的一组 DropDownBox 的值将被重置为列表中的第一个值项。

我们最终将其归结为时间问题,即用户会在页面完成呈现/加载数据之前单击“保存”,并且我们能够在生产服务器上重现它,但由于页面加载速度过快而无法在本地重现。

我们如何在服务器端检测到这一点,以知道返回的数据是无效的,或者停止设置用户未设置的数据?

【问题讨论】:

  • 下拉列表的 SelectedValue 是如何设置的?如果它是在服务器端完成的,那么服务器对初始请求的响应应该是 html,无论用户多久执行任何操作,都将相应的项目标记为选中。
  • 它被设置在服务器端,这是令人困惑的部分。我认为这是因为 DOM 没有完全加载。该页面目前仍在下载中。

标签: asp.net postback selectedvalue


【解决方案1】:

是否考虑过仅在页面加载后才启用保存按钮?

另一个建议...下拉列表有 id 吗?我在没有 id 的动态生成控件方面遇到了一些奇怪的问题,回发后返回错误的值...

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。在本地运行良好,但偶尔的生产用户会以某种方式提交带有部分表单数据的页面。

    从日志记录中,我可以看到 HttpRequestFormVariables 看起来正常,然后值变为空白,这导致站点抛出未处理的异常。

    ctl00$MainContentPlaceHolder$foo$rptForm$ctl01$txtFormFieldId = 3815 ctl00$MainContentPlaceHolder$foo$rptForm$ctl02$txtFormFieldId = 3816 ctl00$MainContentPlaceHolder$foo$rptForm$ctl03$txtFormFieldId = 3817 ctl00$MainContentPlaceHolder$foo$rptForm$ctl04$txtFormFieldId = 3818 ctl00$MainContentPlaceHolder$foo$rptForm$ctl05$txtFormFieldId = ctl00$MainContentPlaceHolder$foo$rptForm$ctl05$txtFormFieldId =

    我能够重现它的唯一方法是在页面中添加一些 Javascript 以使其在完全加载之前提交。

    <script type="text/javascript">
        $("input[id$='btnSubmit']").click();
    </script>
    

    我怀疑我需要在禁用状态下从服务器发回 btnSubmit,然后在页面完成加载后从 Javascript 启用它。

    if (btnSubmit.Enabled)
    {
            btnSubmit.Enabled = false;
            string script = "$(document).ready(function() {$(\"input[id$='" + btnSubmit.ClientID + "']\").removeAttr('disabled');});";
            this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "EnableSubmitButton", script, true);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多