Отменить кросс-страничный постбэк?
У меня есть страница с несколькими ListBox
Если есть некоторая каскадная фильтрация на основе выбранных значений с использованием AutoPostBack
, Форма принимает все выбранные значения и генерирует документ Excel путем публикации на нескольких страницах в другом ASPX. Проблема заключается в том, что после однократного нажатия кнопки "Отправить" он будет постоянно запускать постбэк при каждом изменении выбора.
<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
эс 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 ответа
Это мое текущее решение с использованием 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;"
Проблема заключается в том, что при использовании свойства PostbackUrl действие формы сбрасывается на новый URL-адрес, а ваши вызовы Ajax (или любые последующие обратные вызовы) используют любое текущее действие формы.
Ваше решение не работает, потому что кнопка отправки не является частью вашей UpdatePanel, поэтому она никогда не изменяется.
Самым простым решением может быть перемещение вашего файла Excel, генерирующего код, со страницы, на которой он находится, и на страницу, которую вы просматриваете, в обработчике нажатия кнопки.
Вы также, возможно, могли бы включить iframe на страницу, которую вы просматриваете, и при отправке, вместо перехода на новую страницу, установить источник iframe на страницу, генерирующую Excel.
Оба из них избавили бы от необходимости использования PostbackUrl.