Когда обратная передача не является обратной передачей?(по данным ASP.net) - PullRequest
2 голосов
/ 27 августа 2010

Есть ли разница между тем, как я использую Javascript для перенаправления на URL + "? Querystring = value", и тем, какой механизм ASP.NET использует?

Если есть разница, как я могу сделать так, чтобы отображаемая страница ASP.NET передавалась по тому же URL-адресу с другой строкой запроса с помощью javascript?

Ответы [ 3 ]

4 голосов
/ 27 августа 2010

Если вы хотите сделать пост обратно, как элемент управления asp, такой как asp:Button, вы можете использовать функции javascript, включенные в фреймворк, чтобы сделать это:

__doPostBack('ControlIDOfEventYouWantToRaise','');

Подробнее о __doPostBack вы можете прочитать в этой статье:

Выполнение или повышение обратной передачи с помощью функции __doPostBack () из Javascript в Asp.Net

Простое выполнение form.submit() не будет точно таким же, как использование __doPostBack.

Чтобы ответить на первую часть вашего вопроса, нет никакой разницы в том, что вы делаете перенаправление, если вы просто делаете Response.Redirect, поскольку оба будут делать GET. Разница в том, что если вы, например, используете элемент управления asp:Button, он сначала зайдет на вашу страницу, чтобы обработать кнопку (сообщение назад), а затем сделает GET на перенаправленной странице.

Если вы хотите отправить по тому же URL-адресу (например, опубликовать свои данные), вам следует использовать метод __doPostBack. Если вам не требуется публиковать данные, просто перенаправьте в javascript на тот же URL-адрес с измененной строкой запроса (который будет просто выполнять GET), но ваши данные не будут опубликованы.

1 голос
/ 27 августа 2010

Единственная потенциальная разница в том, что параметр строки запроса отправляется через GET, форма (обычно) отправляется POST.

GET имеет гораздо меньший предел данных, так как браузеры имеют максимальную длину URL (она варьируется)

Вы могли бы использовать javascript для создания form.submit(), который должен эмулировать действия ASP.Net

0 голосов
/ 27 августа 2010

Я несколько не согласен с ответом Basiclife; если у вас есть код внутри что-то вроде

if (IsPostBack) {

это не будет эквивалентно, то есть код будет выполняться, если вы просто устанавливаете URL. Кроме того, элементы управления сохраняют свое состояние в постбэках, но заново инициализируются, если вы снова вызываете URL. Это связано с тем, что ASP.NET пытается эмулировать «нормальное» приложение, поэтому способ обеспечить одинаковый эффект обычного вызова и обратной передачи может привести к «де-ASP.NET-ванию» всей страницы.

Я не уверен, работает ли то, что вы хотите. Там, вероятно, есть способ. Но я сильно подозреваю, что есть лучший способ сделать это. Если вы получаете обратную передачу бесплатно и можете передавать данные, почему важно, чтобы данные отображались в URL-адресе, а не размещались в удобной форме? Я могу видеть, как вы хотите, чтобы страница реагировала на параметр URL, и как вы могли бы впоследствии захотеть изменить этот параметр в зависимости от того, что происходит на этой странице, но, поскольку вы всегда знаете, что отправляете ответ, вы можете, например, переопределить этот параметр URL в этом случае, что-то вы отправляете обратно. Это не звучит , так что приятно, но на самом деле это может быть менее грязно. Тем более, что у вас, кажется, есть причина вообще не отказываться от постбэка (иначе вы могли бы просто использовать ссылку, верно?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...