Можем ли мы опубликовать и перенаправить за одну операцию из ASP.NET Codebehind?

Коллега разрабатывает приложение веб-форм ASP.NET и хочет передавать введенную в форму информацию с одной страницы на другую.

Он спросил меня, как это должно быть сделано, и, несмотря на отсутствие большого опыта работы с веб-формами ASP.NET, я ответил, что это можно сделать как простую публикацию в форме HTML. Однако мы с трудом реализуем это на практике.

Обе страницы используют одну и ту же мастер-страницу, и эта мастер-страница определяет один элемент <form>. На первой странице (точнее, веб-форма) <asp:TextBox runat = "server" ...> элементов и один <asp:LinkButton runat = "server" ...>. Кнопка имеет OnClick = "lkbSend_Click".

В отделенном коде (в методе lkbSend_Click) мой коллега должен выполнить некоторую предварительную проверку перед отправкой информации на вторую страницу, поэтому использование атрибута PostBackUrl для LinkButton (первое предложение, которое я нашел [1], [2]) не разрешено, в по крайней мере, не из разметки aspx.

После дополнительных исследований мы нашли предложения сделать запрос POST с последующим перенаправлением из кода программной части, но это не работает, как мы ожидали, потому что это две отдельные операции — POST работает нормально, но когда пользователь перенаправляется, мы больше нет Request.Form["..."].

Третья идея, с которой я столкнулся [3], заключалась в том, чтобы добавить информацию в Context.Items, а затем использовать Server.Transfer; однако мы не можем этого сделать, потому что URL-адрес должен меняться между страницами.

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

Я подумал об изменении свойства PostBackUrl кнопки ссылки в отделенном коде (в конце метода lkbSend_Click), а затем вызвать новую форму POST. Возможно ли это, и если да, то как?

Я старался:

btnSendEmail.PostBackUrl = "<another page's URL>";
btnSendEmail_OnClick(sender, e);

Но, что неудивительно, это генерирует StackOverflowException.

В случае, если это было бы невозможно, есть ли другой способ пойти?

Дополнительные примечания:

  1. Я так понимаю, что свойства формы PostUrl нет, или оно есть?

  2. Я только что прочитал[4], что «Вы определенно не можете размещать и перенаправлять одновременно». Это было бы правильно? Если да, то как работает HTML <form action = "..."> (и, предположительно, ASP PostBackUrl)?

  3. Данные должны быть отправлены методом POST (т. е. не закодированы в строке URI, как в запросе GET).

  4. Я видел предположение, что сработает перенаправление HTTP 307[5], но оно ненадежно.

Спасибо,

[1] How to pass information between web forms in asp.net
[2] asp.net 4.5 PreviousPage is null with cross page posting using a master page
[3] Redirect to another page using Post method from Code behind
[4] Action PostBackUrl Programmatically using C#
[5] Can I set a POST variable before redirecting to a new page?
[6] A good way to redirect with a POST request?

Вы смотрели / пробовали какие-либо другие ответы на различные вопросы, на которые вы смотрели? Например, этот ответ на Response.Redirect с помощью POST вместо Get? показывает простое создание обычного HTML form с соответствующим атрибутом action...

Heretic Monkey 01.04.2019 21:53

@HereticMonkey да, я видел все из них и пробовал некоторые - не тот, в частности, подумал, потому что это недостаточно просто (в основном, по той же причине, по которой нам неудобно использовать session). Кроме того, это не строго отделенный код, хотя на данный момент я подозреваю, что этот не могу должен быть выполнен в чистом отделенном коде. И если это так, я бы предпочел изменить исходную форму action (через javascript) и принудительно создать новый пост вместо того, чтобы упорядочивать каждый отдельный элемент формы в новый form по отдельности.

Marc.2377 01.04.2019 22:03
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
96
0

Другие вопросы по теме