取消跨页回发?

时间:2010-12-17 16:29:00

标签: asp.net asp.net-ajax asp.net-2.0 cross-page-postback

我有一个页面有几个ListBox es,根据所选值使用AutoPostBack进行一些级联过滤。表单采用所有选定的值,并通过跨页面发布到不同的ASPX生成Excel文档。问题是,在单击提交一次后,每次选择更改时,它都会不断触发跨页回发。

<asp:ScriptManager runat="server" />
<asp:UpdatePanel UpdateMode="Conditional" runat="server">
    <ContentTemplate>
  <asp:ListBox ID="ParentItems" runat="server" SelectionMode="Multiple" AutoPostBack="true"></asp:ListBox>    
  <asp:ListBox ID="ChildItems" runat="server" SelectionMode="Multiple" AutoPostBack="true"></asp:ListBox>  
 </ContentTemplate>
</asp:UpdatePanel>

<asp:Button ID="Submit" runat="server" PostBackUrl="~/AnotherPageThatGeneratesAnExcelDoc.aspx" />

如何从ListBox es'SelectedIndexChanged个活动中取消跨页回发?

以下是代码隐藏中的事件:

Protected Sub ParentItems_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ParentItems.SelectedIndexChanged
 '' do some filtering of the ChildItems ListBox

 '' tried these but they do not work
 ''Submit.Enabled = False

 ''Submit.PostBackUrl = String.Empty

 '' I also tried wrapping the button in a PlaceHolder and hiding/removing it, neither worked
 ''Buttons.Visible = False
 ''Buttons.Controls.Remove(Submit)
End Sub

2 个答案:

答案 0 :(得分:1)

这是我目前使用javascript的解决方案。它有效,但似乎是一个黑客:

// using jQuery, add a click event that resets the form action
$("select[multiple]").click(function () {
    this.form.action = this.form._initialAction;
});

编辑:在代码隐藏中添加点击事件:

ParentItems.Attributes("onclick") = "this.form.action = this.form._initialAction;"

答案 1 :(得分:0)

问题是使用PostbackUrl属性将表单操作重置为新URL,并且您的Ajax调用(或任何后续回发)使用表单的当前操作。

您的解决方案不起作用,因为提交按钮不是您的UpdatePanel的一部分,因此永远不会被修改。

最简单的解决方案可能是将Excel文件生成代码从其所在的页面中移出,并在按钮的单击处理程序中移动到您正在查看的页面中。

你也可能在你正在查看的页面上包含一个iframe,并且在提交时,而不是转到新页面,将iframe的源设置为生成Excel的页面。

这两个都可以避免使用PostbackUrl。