我有一个注册表格,其中包含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>
所以我只想问问这是将多个控件置于更新面板下的正确方法吗?
最佳答案
在客户端订阅initializeRequest
的ajax事件。在这种情况下,我们可以根据需要取消ajax回发。
在这种情况下,我们将检查由于ddlCountry
是否正在发起异步回发,如果是,则我们取消ajax回发,因此不会发生回发。
要解决您的问题,只需执行以下:将以下JavaScript添加到aspx页面。在下面的代码中,当浏览器加载页面,加载所有脚本以及创建所有客户端对象之后,ASP.Net Framework会在客户端自动调用pageLoad
方法。
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>
以下仅是建议,而不是您的特定问题的解决方案的一部分:此外,我建议不要使用
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>
关于c# - 将多个控件放入更新面板的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34605384/