Как мне сделать ответную публикацию onclientclick, используя jQuery с asp.net

StackOverflow https://stackoverflow.com/questions/171000

Вопрос

Я хочу воссоздать обратную передачу панели обновления без использования панели обновления для обратной передачи.Каков общий метод для этого?

Например, в 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 и веб-методы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top