【问题标题】:RadAjax not firing on 1st click after client side event handler客户端事件处理程序后,RadAjax 未在第一次单击时触发
【发布时间】:2016-06-21 12:55:25
【问题描述】:

我正在使用 RadAjaxManager 来 ajaxify 一些 WebForms 控件。 ajax 在所有情况下都能正常工作,除了一个:

我有一个链接按钮:

<asp:LinkButton ID="lnkSaveButton" 
                    Text="Save" 
                    OnClick="lnkSaveButton_Click"
                    OnClientClick="if ( ! validateValidation()) return false;"
                    runat="server" />

validateValidation 函数会在我的表单控件上触发一些客户端页面验证,如果页面无效,它会返回 false 以阻止表单提交。

在页面无效的情况下,RadAjaxManager 所针对的所有控件都无法在验证完成后(仅)第一次单击时触发其 ajax 请求。

任何后续点击 ajaxified 控件都会正确触发请求。还值得注意的是,所有 Ajaxified 控件在一个 ajaxified 控件被单击一次后正常工作。单击任何非 ajaxified 控件(不是 RadAjaxManager 的目标)没有任何影响。

还值得注意的是,如果我将RadAjaxManager 替换为简单的RadAjaxPanels,我会得到与上述完全相同的结果。

发生了什么,我该如何解决?

【问题讨论】:

    标签: javascript c# asp.net telerik radajaxmanager


    【解决方案1】:
    • 确保您没有添加包含 RadAjaxPanel 控件的 AjaxSettings

    • 确保没有引发脚本错误,尤其是在验证过程中

    • 如果验证成功,请尝试在客户端处理程序中调用 ajaxRequsetWithTarget,例如:

          <telerik:RadCodeBlock runat="server" ID="RadCodeBlock1">
              <script>
                  function validateValidation() {
                      var validatinPassed = true;
                      $find("<%=RadAjaxManager.GetCurrent(Page).ClientID%>").ajaxRequestWithTarget('<%= lnkSaveButton.UniqueID %>', '');
                      return false;
                  }
              </script>
          </telerik:RadCodeBlock>
          <asp:LinkButton ID="lnkSaveButton"
                          Text="Save"
                          OnClick="lnkSaveButton_Click"
                          OnClientClick="if (! validateValidation())
                              return false;"
                          runat="server" />
          <asp:Label ID="Label1" Text="text" runat="server" />
          <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
              <AjaxSettings>
                  <telerik:AjaxSetting AjaxControlID="lnkSaveButton">
                      <UpdatedControls>
                          <telerik:AjaxUpdatedControl ControlID="lnkSaveButton" />
                          <telerik:AjaxUpdatedControl ControlID="Label1" />
                      </UpdatedControls>
                  </telerik:AjaxSetting>
              </AjaxSettings>
          </telerik:RadAjaxManager>
      

      以及用于测试的示例处理程序

      protected void lnkSaveButton_Click(object sender, EventArgs e)
      {
          Label1.Text = DateTime.Now.ToString();
      }
      

    【讨论】:

    • 感谢您的提示。我想我已经涵盖了大部分内容,但我会尽快尝试 ajaxRequestWithTarget 函数并告诉你它是如何进行的。
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多