aspx: форма всегда пересылается на одну и ту же страницу - PullRequest
1 голос
/ 21 сентября 2010

на странице products.aspx я создал форму:

<form id="send_info_form" method="post" action="send_email.aspx">
<input type="text" name="the_name />
<input type="submit" />
</form>

когда я нажимаю на кнопку отправить, он перенаправляется на ту же страницу (products.aspx), а не на страницу, которую я установил в атрибуте действия формы.

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Похоже, у вас неправильное представление о том, как работает логика ASP.NET - ASP.NET имеет совершенно другую парадигму, чем PHP или ASP.

Похоже, что вы используете более классический ASP или PHP подход к прямой обработке целевых страниц форм и значений POST, что вам больше не нужно.Вам также не нужна отдельная страница для обработки логики отправки формы;все это обрабатывается обработчиками событий в коде исходной страницы.

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

Что вынеобходимо сделать следующее:

На странице Products.aspx:

E-mail Address: <asp:TextBox runat="server" ID="txtEmail" />
<asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" Text="Submit" />

Обратите внимание, что тег формы не требуется (кроме того, который уже был предоставлен вам при первом создании страницы ASPX.

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

В коде для Products.aspx (я предполагаю, что C #, поэтому Products.aspx.cs), добавьте метод для btnSubmit_Click:

protected void btnSubmit_Click(object sender, EventArgs e) {
    string sendEmailTo = txtEmail.Text;
    // insert mail sending logic here
}
1 голос
/ 22 сентября 2010

В ASP.NET тег по умолчанию всегда будет размещаться на одной и той же странице. Это позволяет обрабатывать любые события в коде на странице ASPX. Из вашего вопроса не ясно, что именно вы пытаетесь сделать. Я могу придумать три возможных сценария:

1) Вы хотите отправить обратно на ту же страницу и переключить видимость элементов пользовательского интерфейса (других панелей и т. Д.) В зависимости от результата обработки или перенаправить пользователя на вторую целевую страницу после завершения обработки. Это наиболее распространенный сценарий, и я рекомендую использовать подход, потому что он хранит всю логику обработки формы в одном месте.

2) Вы можете указать PostBackUrl, чтобы указать другую (ASP.NET) страницу для управления кнопками и еще много чего. Оттуда вы можете выполнить обработку элементов на первой странице на второй странице, используя свойство PreviousPage. См. http://msdn.microsoft.com/en-us/library/ms178139.aspx для получения дополнительной информации.

3) Если у вас есть отдельная страница, которую вы хотите опубликовать, но которую вы не контролируете, она не основана на ASP.NET (то есть форма другого сайта или сайт PHP / ASP3.0, на котором вы работаете), значительно сложнее. ASP.NET объединяет все в один гигантский элемент. Поскольку теги не могут быть надежно встроены друг в друга в HTML, вам придется либо выполнить POST без вывода сообщений вручную из своего кода, либо использовать Javascript для тихой отправки ajax-запроса после отправки.

...