簡體   English   中英

沒有JavaScript的ASP.NET WebForms中的多個提交按鈕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM