2016-11-15 10 views
0

результаты ASP.NET Repeater в следующем HTML-код на стороне клиента:Multiple кнопки отправки в WebForms ASP.NET без JavaScript

<form name="sourceForm" method="post" action="sources.aspx" id="sourceForm"> 
    <table> 
     <tr> 
     <td>Best Buy</td> 
     <td><input type="submit" value="Receive data" name="RecData1110" /></td> 
     </tr> 
     <tr> 
     <td>Walmart</td> 
     <td><input type="submit" value="Receive data" name="RecData1085" /></td> 
     </tr> 
     <tr> 
     <td>Seven Eleven</td> 
     <td><input type="submit" value="Receive data" name="RecData1125" /></td> 
     </tr> 
    </table> 
</form> 

атрибут каждой кнопки name динамически генерируется из текстового префикса и ID записи из база данных.

Как получить информацию, какая кнопка отправила форму без участия JavaScript? (Я знаю, как это сделать с помощью JavaScript). Это должно быть сделано с запросом POST.

Обычно я получаю значения элементов управления в следующем виде:

Request.Form["ControlName"] 

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

Возможно ли это вообще с чистым HTML и ASP.NET?

ответ

0

Хорошо, кажется, что перечисление должно быть вовлечено:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     int? id = null; 
     foreach (string item in Request.Form.AllKeys) 
      if (item.StartsWith("RecData")) 
       id = int.Parse(item.Replace("RecData", "")); 
    } 
} 
0

Создать плоский файл с расширением .html и открыть его в браузере. Используйте этот код:

<HTML> 
<FORM> 
<INPUT Type="Submit" ID="Button1" Name="Button1_Was_Pressed" Value="Click Me"> 
<INPUT Type="Submit" ID="Button2" Name="Button2_Was_Pressed" Value="Click Me"> 
</FORM> 
</HTML> 

Когда вы открываете его в браузере, вы должны увидеть две кнопки с надписью «Click Me». Таким образом, кнопки выглядят идентично конечному пользователю. Однако, если вы нажмете кнопку Button1, вы получите строку запроса из

?Button1_Was_Pressed=Click+Me 

И если вы нажмете button2, вы получите строку запроса из

?Button2_Was_Pressed=Click+Me 

Учитывая такое поведение, вы должны иметь возможность модифицировать код повторителя, чтобы испускать уникальный атрибут Name для каждой строки, а при отправке формы сервер может искать имя в коллекции Request.QueryString.

И, конечно же, он также работает с POST.

<HTML> 
<FORM method="POST"> 
<INPUT Type="Submit" ID="Button1" Name="Button1_Was_Pressed" Value="Click Me"> 
<INPUT Type="Submit" ID="Button2" Name="Button2_Was_Pressed" Value="Click Me"> 
</FORM> 
</HTML> 

и

if (Request.Form["Button1_Was_Pressed"] != null) HandleButton1Click(); 

Если у вас есть тонна кнопок, вы можете цикл через них:

for (int i=0; i < buttonCount; i++) 
{ 
    string buttonName = String.Format("Button{0}_Was_Pressed", i); 
    if (Request.Form[buttonName] != null) HandleButtonClick(i); 
} 

Или вы можете перечислить значения (с помощью Allkeys) так же, как у вас есть сделано в вашем собственном ответе.