Обратная передача ASP.NET с помощью jQuery? - PullRequest
15 голосов
/ 15 апреля 2009

У меня есть кнопка 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, и недавно я перешел на диалоговое окно jQuery UI Modal, но я не жду ответа на вопрос ... обратная передача происходит немедленно ... поэтому я решил изменить стандартная кнопка HTML ... но мне нужно отправить обратно на страницу ASP.NET и вызвать метод, как.

Если я просто отправлю ответ, он не вызовет очистку

Protected Sub Cleanup()
    UtilTMP.DisposeObjects()
    Server.Transfer("~\Forms\test.aspx", True)
End 

Ответы [ 6 ]

16 голосов
/ 15 апреля 2009

Посмотрите, поможет ли это: 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
}

Затем вы можете вызвать функцию щелчка этого якоря с помощью этого JavaScript:

document.getElementById('anchorId').click()
6 голосов
/ 15 апреля 2009

Хотя вы можете делать Postbacks с JQuery, может быть лучше вызвать веб-метод (веб-сервис, который находится на вашей странице). Вызов также может быть быстрее, потому что вы не публикуете всю страницу ViewState.

4 голосов
/ 21 июня 2009

Ознакомьтесь с этой статьей

http://www.deviantpoint.com/post/2009/03/12/Using-jQuery-UI-Dialogs-for-confirmation-windows.aspx

Основная идея заключается в том, чтобы поместить функцию обратного вызова в скрытое поле и запустить eval на $(this).dialog('close');

Я использовал это, чтобы оно работало в Gridview, поэтому, если вы хотите знать, как это сделать, оставьте комментарий.

4 голосов
/ 15 апреля 2009

Вам необходимо установить для скрытого поля __EVENTTARGET соответствующее значение, если вы хотите вызвать обработчик события при обратной передаче. Однако я бы сделал это по-другому. Поместите в модальное диалоговое окно кнопки ASP, с которыми связан обработчик событий. Сделайте так, чтобы обработчик щелчков, который всплывал в диалоговом окне, возвращал значение false (чтобы после этого нажатия кнопки обратной передачи не происходило) Таким образом, ваша форма отправляется обратно с кнопки ASP, и автоматически вызывается обработчик, включая настройку скрытого поля на стороне клиента.

0 голосов
/ 20 декабря 2010

Я наткнулся на этот пост через Google, поэтому я подозреваю, что другие тоже. Я попробовал методы здесь, которые не работали для меня. Я объясню свое решение, но сначала краткий обзор того, что я пытаюсь сделать.

У меня есть форма, которая использует jQuery ajax для публикации данных на моем веб-сервисе, который, в свою очередь, обновляет мою базу данных. У меня есть форма загрузки изображений, по соображениям безопасности вы не можете получить полный путь к файлу, который будет использоваться при вызове ajax для передачи в веб-сервис ... так что это должно быть сделано с помощью обычной обратной передачи asp.net. Поэтому моя дилемма в том, как сделать то и другое. Я обновил базу данных с помощью своей функции ajax. После того, как веб-служба вернула мне успех, я приказал форме выполнить обратную передачу к определенному методу в коде, а затем перенаправить куда угодно. $("#Button1").click(function () { javascript: __doPostBack('ctl00$ContentPlaceHolder1$atest', '') });

По сути, это то же самое, что назначение функции щелчка элементу управления asp.net, за исключением того, что вместо нажатия кнопки, которую я говорю javascript, выполнить ее. atest будет идентификатором, который я назначил элементу управления asp.net.
Примечание: <%=myclientid.ClientID %> здесь не будет работать.

0 голосов
/ 15 апреля 2009

Вы можете остановить постбэк с помощью того, что JS прикреплено к событию onclick кнопки, независимо от того, является ли это WebControl или стандартной кнопкой HTML, вернув false.

например. <input type="image" id="test" onclick="doWhatever();return false;" />

...