JQuery / AJAX редирект? - PullRequest
       1

JQuery / AJAX редирект?

0 голосов
/ 05 января 2010

Хорошо, это немного другой сценарий. Думаю, мне бы в любом случае пришлось подумать о том, чтобы сделать это с MVC, если бы мы на самом деле использовали MVC ... но сейчас мы этого не делаем.

Итак, у меня есть страница .aspx. На этой странице .aspx находится пользовательский элемент управления (.ascx). И в этом пользовательском элементе управления есть пользовательский элемент управления (.cs).

Таможенный элемент управления имеет повторитель. Итак, я показываю список элементов в этом .aspx через пользовательский элемент управления .ascx. Для каждого элемента в повторителе есть кнопка. Это просто гиперссылка, просто обычная на моей странице

Когда вы нажимаете эту кнопку, она перенаправляется на любую страницу, на которой вы находитесь. Поскольку пользовательский элемент управления никогда не знает, какая у вас родительская страница .aspx, я делаю перенаправление на собственную .aspx, выполняя Response.Redirect (Request.Path). Таким образом, он всегда перенаправляет к тому, что .aspx использует этот пользовательский элемент управления и пользовательский элемент управления.

Так что после того, как он перенаправляет себя, я проверяю строку запроса в page_load того, что использует .aspx. Если значение равно true, тогда я обрабатываю его так, как хочет .aspx. В этом случае, когда это правда, я вызываю метод в коде моего .aspx, который обрабатывает действие для кнопки. Например, допустим, что кнопка «Добавить в корзину», ASPX обрабатывает это действие и вызывает метод AddToCart в .aspx.cs.

Я не использую элемент управления ASP.NET для фактической гиперссылки и кнопки, потому что мне это просто не нужно, и в моем конкретном случае я использую пользовательский элемент управления и пользовательский элемент управления сервером. В этом случае у меня возникла проблема, когда я не хотел использовать элемент управления ASP.NET ... Я забыл, почему, но суть в том, что нет, это то, что есть.

Итак, я пытаюсь выяснить, как я могу применить здесь некоторый AJAX-вызов для вызова этого метода. Мне все еще нужно как-то перенаправить снова обратно на ту же страницу, что и я ... Я делаю перенаправление в этом методе после всей логики в конце. Я снова перенаправляю обратно на ту же страницу, потому что мне нужно, чтобы мои методы Page_Load в моем .aspx, а также в .ascx все еще запускались после завершения этого метода.

Так что я не уверен, с чего начать. Позвольте мне пройти через это еще раз:

  1. Пользовательский элемент управления имеет повторитель, а в повторителе каждый элемент имеет стандартную гиперссылку HTML (не элемент управления ASP.NET), которая оборачивает стандартный тег изображения (изображение - кнопка)
  2. Пользовательский элемент управления содержит пользовательский элемент управления
  3. Страница .aspx содержит пользовательский элемент управления
  4. Пользователь нажимает кнопку, и гиперссылка перенаправляет их на родительскую страницу .aspx, использующую этот пользовательский элемент управления ... поэтому он вызывает Response.Redirect (Request.Path)
  5. В коде этого .aspx в моей page_load я проверяю флаг строки запроса, чтобы увидеть, выполнил ли я это действие. Значит, пользователь нажал на эту кнопку. Например, один из параметров строки запроса - «AddItem», а другой параметр строки запроса - «itemID». Если MoveItem истина, то я запускаю метод с именем MoveItem (int itemID)
  6. Метод MoveItem называется
  7. Метод MoveItem снова перенаправляет обратно в тот же файл .aspx, используя Response.Redirect (Request.Path). Это делается для того, чтобы снова загружалась загрузка страницы, а также загрузка моей страницы .ascx. Потому что на обеих этих страницах я перепривязываю повторитель, чтобы показать последнее состояние списков. Я вызываю метод в моей .aspx page_load, который связывает сетку, а затем page_load в моем .ascx также вызывает другой метод, который связывает какой-то другой список

Ответы [ 3 ]

1 голос
/ 05 января 2010

Вам следует взглянуть на DataTables.net , поскольку вы можете создать клиентскую редактируемую сетку, которая будет также выполнять обновления Ajax. Вы сможете сохранить контроль над ретранслятором, но исключите все обратное и обратное на сервер, расшифровку кликов и координацию между Page_Load и т. Д. Вот хороший пост от Дейва Уорда (Encosia), который охватывает элементы управления jQuery, Page_Methods и повторителя.

Если вы хотите сохранить свою работу до сих пор, почему бы не попробовать Ajax Update Panel по всему региону, который вы не хотите видеть "обновить"?

1 голос
/ 05 января 2010

Вы можете использовать $.get() для передачи переменных в метод на стороне сервера, который выполняет любые функции на стороне сервера, которые вам нужны. Вам не нужно запускать page_load или иметь код позади.

Если вам нужно только обновить HTML в браузере клиента, вы можете использовать jQuery для добавления / удаления их из списков в HTML. Вы можете использовать функцию html() в jQuery, чтобы добавить элемент в список.

0 голосов
/ 05 января 2010

Помните, что первый A AJAX - асинхронный . Конечно, вы захотите избежать перезагрузки страницы вашей кнопкой. Что-то вроде:

  1. Определите данные, которые нужно отправить на страницу обработчика "добавить в корзину" - номер детали (SKU и т. Д.), Цвета, размеры, количество и т. Д.
  2. Убедитесь, что эти данные находятся на каждой применимой странице одинаковым образом: возможно, один или несколько скрытых элементов ввода или даже URL-адрес страницы.
  3. Замените пользовательскую гиперссылку / кнопку управления href вместо обработчика [ на стороне клиента ] onclick , который получит данные из шага 2 и отправит их через $. ajax () (или $ .post или $ .get), указав обработчики ответа. Вы, вероятно, хотите отключить кнопку или дать другой визуальный отзыв, чтобы избежать повторных нажатий.
  4. В обработчиках ответов обновите раздел корзины покупок на странице, указав количество товаров или указав успех или неудачу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...