Ответ 1
Пока вы можете делать Postbacks с помощью JQuery, лучше назвать веб-метод (веб-сервис, который находится на вашей странице). Вызов также может быть быстрее, потому что вы не публикуете всю страницу ViewState.
У меня есть кнопка ASP.NET, но в последнее время я заменил ее на стандартную кнопку HTML... Мне нужно сделать обратную передачу на страницу ASP.NET и гарантировать, что будет вызван метод.
Предыдущая кнопка была кнопкой ASP.NET, поэтому у меня было это событие:
Protected Sub btnCancelar_Click(ByVal sender As Object, ByVal e As System.EventArgs)
UtilTMP.DisposeObjects()
Server.Transfer("~\Forms\test.aspx", True)
End
Но я использовал кнопку с JavaScript ALERT, и недавно я изменился на диалог jQuery UI Modal, но не дождался, когда я отвечу на вопрос. postback происходит незамедлительно... поэтому я решил перейти на стандартная кнопка HTML... но мне нужно отправить обратно на страницу ASP.NET и вызвать метод вроде.
Если я просто вернусь, он не будет вызывать очистку
Protected Sub Cleanup()
UtilTMP.DisposeObjects()
Server.Transfer("~\Forms\test.aspx", True)
End
Пока вы можете делать Postbacks с помощью JQuery, лучше назвать веб-метод (веб-сервис, который находится на вашей странице). Вызов также может быть быстрее, потому что вы не публикуете всю страницу ViewState.
Посмотрите, поможет ли это: http://www.codeproject.com/KB/aspnet/sample.aspx.
В принципе, вы объявляете фиктивный якорный тег:
<a id="anchorId" runat="server" onclick="return true" onserverclick="foo"></a>
В вашем коде позади вам нужно объявить метод foo:
protected void foo(object sender, EventArgs e)
{
// Do something here
}
Затем вы можете вызвать эту функцию привязки anchor с помощью этого javascript:
document.getElementById('anchorId').click()
Вам нужно установить скрытое поле __EVENTTARGET к соответствующему значению, если вы хотите вызвать обработчик события после обратной передачи. Однако я бы сделал это по-другому. Поместите кнопки ASP в свой модальный диалог, связанный с ними обработчиком событий. Попросите обработчик щелчка, который появляется в диалоговом окне, возвращает false (так что после этого нажатия кнопки не происходит обратная передача). Таким образом, ваша форма отправляется обратно с кнопки ASP, и обработчик, включая скрытый параметр на стороне клиента, запускается автоматически.
Ознакомьтесь с этой статьей
http://www.deviantpoint.com/post/2009/03/12/Using-jQuery-UI-Dialogs-for-confirmation-windows.aspx
Основная идея заключается в том, что вы помещаете функцию обратного вызова в скрытое поле и запускаете eval на $(this).dialog('close');
Я использовал это, чтобы он работал в Gridview, поэтому, если вы хотите знать, как это сделать, оставьте комментарий.
Вы должны иметь возможность остановить обратную передачу с помощью любого JS, прикрепленного к событию onclick, независимо от того, является ли это WebControl или стандартной HTML-кнопкой, возвращая false.
например. <input type="image" id="test" onclick="doWhatever();return false;" />
Я столкнулся с этим сообщением через Google, поэтому я подозреваю, что другие тоже будут. Я пробовал здесь методы, которые не работали для меня. Я объясню свое решение, но сначала обзор того, что я пытаюсь сделать.
У меня есть форма, которая использует jQuery ajax для отправки данных на мой веб-сервис, который, в свою очередь, обновляет мою базу данных. У меня есть форма загрузки изображений, по соображениям безопасности вы не можете получить полный путь к файлу, который будет использоваться в вызове ajax, чтобы перейти к веб-сервису... так что это должно быть сделано с обычной обратной записью asp.net. Поэтому моя дилемма заключается в том, как сделать то и другое. То, что я сделал, это использовать мою функцию ajax для обновления базы данных, как только я вернусь к работе с веб-сервисом, я скажу форме, чтобы сделать обратную ссылку на определенный метод в коде, а затем перенаправить туда, где бы вы ни находились.
$("#Button1").click(function () {
javascript: __doPostBack('ctl00$ContentPlaceHolder1$atest', '')
});
Это, по сути, точно так же, как назначение функции click для элемента управления asp.net, за исключением того, что вместо нажатия кнопки я говорю javascript для ее выполнения.
atest
будет идентификатором i, назначенным элементу управления asp.net.
Примечание: <%=myclientid.ClientID %>
здесь не работает.