Как мне сделать ответную публикацию onclientclick, используя jQuery с asp.net
-
05-07-2019 - |
Вопрос
Я хочу воссоздать обратную передачу панели обновления без использования панели обновления для обратной передачи.Каков общий метод для этого?
Например, в Stackoverflow, когда вы голосуете за или против вопроса, он выполняет обратную передачу для обновления базы данных, и я готов поспорить, что они не использовали панель обновления.
Что у меня есть?
У меня есть таблица с табличными данными.Когда я нажимаю на td
элемент как целый столбец, я хочу обновить базу данных, а также обновить представление сетки на самой странице.В представлении сетки отображаются все выбранные в данный момент элементы в таблице, поскольку она была обновлена с помощью «нашего метода».
Ищу хороший общий метод, который я мог бы использовать для большого количества асинхронных обратных передач без панели обновления.
Решение
Принцип работы Stack Overflow отличается от той статьи CodeProject двумя важными моментами.
Stack Overflow выполняет запрос AJAX к действию контроллера ASP.NET MVC, а не к отдельной странице ASPX.Вы можете рассматривать это как MVC-аналог страничного метода ASP.NET AJAX.В обоих случаях метод ASPX будет отставать по производительности.
Запрос AJAX Stack Overflow возвращает сериализованный результат JSON, а не произвольный открытый текст или HTML.Это делает обработку данных на стороне клиента более стандартизированной и в целом более чистой.
Например:когда я проголосовал за этот вопрос, запрос XmlHttpRequest был отправлен на /questions/171000/vote с «voteTypeId» равным 2 в данных POST.
Контроллер, который обработал запрос, добавил мой голос куда-то в таблицу, а затем ответил этим JSON:
{"Success":true,"NewScore":1,"Message":"","LastVoteTypeId":2}
Используя эту информацию, этот JavaScript позаботится об обновлении отображения на стороне клиента:
var voteResult = function(jClicked, postId, data) {
if (data.Success) {
jClicked.parent().find("span.vote-count-post").text(data.NewScore);
if (data.Message)
showFadingNotification(jClicked, data.Message);
}
else {
showNotification(jClicked, data.Message);
reset(jClicked, jClicked);
if (data.LastVoteTypeId) {
selectPreviousVote(jClicked, data.LastVoteTypeId);
}
}
};
Если вы используете WebForms, пример вызова методов страницы, который вы нашли в моем блоге, определенно вам подходит.
Однако я бы посоветовал вам рассмотреть возможность использования веб-сервиса для любой централизованной функциональности (например, в этом примере голосования), а не методов страницы.Методы страницы кажутся немного проще писать, но они также имеют некоторые недостатки повторного использования и имеют тенденцию создавать иллюзию дополнительной безопасности, которой на самом деле нет.
Это пример того же, что вы нашли, но с веб-сервисами (комментарии к этому сообщению фактически привели к найденному вами сообщению):
http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/
Другие советы
Для этого вы можете просто использовать стандартный вызов AJAX.Создайте страницу .aspx, которая обновляет базу данных в своем методе Page_Load и отображает любую желаемую информацию (например, текущее значение базы данных после обновления) в виде XML.Затем выполните AJAX-вызов этой страницы с помощью jQuery.
Вы также можете вернуть фрагмент HTML (т.е.обновленный GridView) и используйте jQuery для вставки обновленного HTML-кода на текущую страницу.
Редактировать:Пример 2 на этой странице должен быть очень близок к тому, что вы хотите:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx
Эта ссылка - это то, что я считаю лучшим решением, позволяющим мне использовать javascript и веб-методы.