[英]Multiple submit buttons in ASP.NET WebForms without JavaScript
ASP.NET Repeater在客戶端產生以下HTML代碼:
<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完全可行嗎?
好的,似乎應該涉及到枚舉:
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", ""));
}
}
創建擴展名為.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集合中查找名稱。
if (Request.QueryString["Button1_Was_Pressed"] != null) HandleButton1Click();
當然,它也適用於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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.