将多个控件放在更新面板中的正确方法是什么?

Lea*_*sed 14 c# asp.net updatepanel telerik

我有一个注册表单,其中包含3到4个下拉控件和2个日期选择器,现在当选择下拉控件值时(选择索引更改被触发)然后我不希望我的页面回发.

我使用更新面板来阻止这种帖子的行为,如下所示:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>

      <%--Update Panel for date picker%>
      <asp:UpdatePanel ID="UpdatePanelDatepicker" runat="server">
                    <ContentTemplate>
                      <telerik:RadDatePicker ID="rdpDate1" runat="server">
                      </telerik:RadDatePicker>
                    </ContentTemplate>
      </asp:UpdatePanel>

       <%--Update Panel for Dropdown--%>
       <asp:UpdatePanel ID="updatepaneldata" runat="server"> 
                      <ContentTemplate>
                     <telerik:RadComboBox ID="ddlCountry" runat="server">
                      </telerik:RadComboBox>
                    </ContentTemplate>
      </asp:UpdatePanel>


  </ContentTemplate>
    </asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

所以我只是想问这是在更新面板下放置多个控件的正确方法吗?

Sun*_*nil 4

订阅initializeRequest客户端的ajax事件。在这种情况下,如果需要,我们可以取消 ajax 回发。

在异步请求处理开始之前,会引发initializeRequest 方法。您可以使用此事件取消回发。

在这种情况下,我们将检查是否由于 启动异步回发ddlCountry,如果是,则我们取消 ajax 回发,这样就不会发生回发。

要解决您的问题,只需执行以下操作将以下 JavaScript 添加到您的 aspx 页面。在下面的代码中,pageLoad当浏览器加载页面时以及加载所有脚本以及创建所有客户端对象后,客户端的 ASP.Net Framework 自动调用该方法。

JavaScript 取消组合框回发

<script type="text/javascript">
function pageLoad()
{
     Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(CancelComboBoxPostback);
}

function CancelComboBoxPostback(sender, args)
{
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'ddlCountry') {
         args.set_cancel(true);
    }
 }
</script>
Run Code Online (Sandbox Code Playgroud)

以下只是建议,而不是针对您的特定问题的解决方案的一部分:另外,我建议远离,nested update panels因为如果开发人员不知道嵌套更新面板的工作原理,这可能会导致意外结果。在您的情况下,单个更新面板应该足以满足下面的标记,而不是您在原始标记中使用的嵌套更新面板。

没有嵌套更新面板的标记

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
              <telerik:RadDatePicker ID="rdpDate1" runat="server">
              </telerik:RadDatePicker>

              <telerik:RadComboBox ID="ddlCountry" runat="server">
              </telerik:RadComboBox>
    </ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)