ASP.Net кросс-постинг

В настоящее время у меня есть две страницы:

Первая страница содержит форму ввода, а вторая страница создает документ Excel. Кнопка формы ввода отправляет на эту вторую страницу.

Что я хотел бы сделать, это добавить вторую кнопку, которая также публикует на 2-й странице; однако мне понадобятся запросы, созданные с помощью этой новой кнопки, чтобы действовать по-другому, что подводит меня к моему вопросу:

Можно ли со 2-й страницы узнать, какая кнопка была нажата для отправки запроса?

Основная причина, по которой я спрашиваю, состоит в том, что я хотел бы повторно использовать логику 2-й страницы при анализе информации с первой страницы, если это возможно; Я бы предпочел не копировать его на новую страницу и не размещать на нем новую кнопку.

Спасибо!

4 ответа

Решение

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

Изменить: После перечитывания вашего поста, я думаю, что я неправильно понял, что вы пытались достичь. Если вы просто пытаетесь определить, какая кнопка на странице отправки была нажата, это можно сделать с помощью строки запроса:

Page1.aspx:

<asp:Button ID="Button1" Text="Button 1" PostBackUrl="~/Page2.aspx?button=1" runat="server" />
<asp:Button ID="Button2" Text="Button 2" PostBackUrl="~/Page2.aspx?button=2" runat="server" />

Page2.aspx.cs:

string sButton = "0";
if (Request.QueryString["button"] != null)
    sButton = Request.QueryString["button"];

if (sButton == "1")
    // Do button 1 stuff
else if (sButton == "2")
    // Do button 2 stuff

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

Т.е.

if(Request.Form["Button1ClientID"] != null)
  //button 1 stuff
else if(Request.Form["Button2ClientID"] != null)
  //button 2 stuff

Если кто-нибудь знает лучший способ сделать это, пожалуйста, дайте мне знать

Изменить: уникальный идентификатор, а не идентификатор клиента

На самом деле, проверка кнопки в Request.Form работает только при использовании элементов управления Button. Мне это нужно было в проекте, где я использую LinkButtons, которые ничего не помещают в Request.Form. Однако я смог определить, какая кнопка была нажата, с помощью следующего кода:

if (Request.Form["__EVENTTARGET"] == button1.UniqueID) {
  // do button 1 stuff
} else if (Request.Form["__EVENTTARGET"] == button2.UniqueID) {
  // do button 2 stuff
}

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

Если это просто чистый HTML и ваш атрибут действия формы указывает на 2-ю страницу...

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

Если мы говорим об ASP.NET (как следует из заголовка и тега), вы можете обработать событие щелчка на каждой стороне сервера в обратной передаче, чтобы определить, какая из них была нажата. Но отправить форму ASP.NET на вторую страницу не обязательно просто. См. Сообщение Скотта Гатри о перезаписи URL, в частности, в конце статьи о переопределении атрибута действия тега формы.

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