Как сделать пост на клике по клику, используя jQuery с asp.net - PullRequest
12 голосов
/ 05 октября 2008

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

Например, в Stackoverflow, когда вы голосуете вверх или вниз по вопросу, он выполняет обратную передачу для обновления базы данных, и я готов поспорить, что они не использовали панель обновления.

Что у меня есть?

У меня есть таблица с табличными данными. Когда я нажимаю на элемент td как на весь столбец, я хочу обновить базу данных, а также обновить сетку на самой странице. В сетке отображаются все элементы, выбранные в данный момент в таблице, поскольку они были обновлены с помощью «нашего метода».

В поисках хорошего универсального метода, который я мог бы использовать для многих асинхронных обратных передач без панели обновления.

Ответы [ 3 ]

17 голосов
/ 05 октября 2008

Способ, которым работает переполнение стека, отличается в двух важных аспектах от этой статьи CodeProject.

  • Переполнение стека выполняет свой AJAX-запрос на действие контроллера ASP.NET MVC, а не на отдельную страницу ASPX. Вы можете рассматривать это как MVC-аналог метода ASP.NET AJAX-страницы. В обоих случаях метод ASPX будет отставать в плане производительности.

  • Запрос AJAX переполнения стека возвращает сериализованный результат JSON, а не произвольный открытый текст или HTML. Это делает обработку на стороне клиента более стандартизированной и в целом более чистой.

Например: когда я голосовал за этот вопрос, был сделан запрос XmlHttpRequest к / questions / 171000 / voice, с значением «pollTypeId», равным 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/

2 голосов
/ 05 октября 2008

Эта ссылка - это то, что я считаю лучшим решением, и позволяет мне использовать javascript и веб-методы.

2 голосов
/ 05 октября 2008

Вы можете просто использовать стандартный вызов AJAX для этого. Создайте страницу .aspx, которая обновляет базу данных в своем методе Page_Load и отображает любую необходимую информацию (например, текущее значение БД после обновления) в виде XML. Затем сделайте AJAX-вызов на эту страницу, используя jQuery.

Вы также можете вернуть HTML-фрагмент (т.е. обновленный GridView) и использовать jQuery для вставки обновленного HTML-кода в текущую страницу.

Edit: Пример 2 на этой странице должен быть очень близок к тому, что вы хотите:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx

...