簡體   English   中英

如何在頁面加載時檢查是否單擊了ASP.NET按鈕

[英]How to check whether ASP.NET button is clicked or not on page load

如何檢查ASP.NET中是否單擊了某個特定按鈕?

我想我需要在Page_Load上執行一些操作。 這不應該進入要查找的Button_Click事件。 有什么方法可以找到客戶端點擊或不點擊它的位置並將其帶到Page_Load

背景:基本上__EVENTTARGET__EVENTARGUMENT ,當任何Web控件的任何autopostback屬性設置為true時,這兩個隱藏控件都會添加到HTML源代碼中。

__EVENTTARGET隱藏變量將告訴服務器,哪個控件實際執行服務器端事件觸發,以便框架可以觸發該控件的服務器端事件。

__ EVENTARGUMENT變量用於在應用程序需要時提供其他事件信息,可以在服務器中訪問。

因此,我們可以使用以下命令輕松獲得引發回發的控件: Request.Params.Get("__EVENTTARGET");

問題:

方法: Request.Params.Get("__EVENTTARGET"); 將適用於CheckBoxesDropDownListsLinkButtons等..但這不適用於按鈕控件,如ButtonsImageButtons

Button控件和ImageButton控件不會調用__doPostBack函數。 因此, _EVENTTARGET將始終為空。 但是,其他控件使用javascript函數__doPostBack來觸發回發。

所以,我建議做一些如下的事情。 OnClientClick屬性添加到按鈕。 另外,在Markup中定義一個hiddenField,其值將包含導致回發的實際按鈕。

<asp:Button ID="Button1" runat="server" Text="Button"
     OnClientClick = "SetSource(this.id)" />
<asp:ImageButton ID="ImageButton1" runat="server"
     OnClientClick = "SetSource(this.id)" />
<asp:HiddenField ID="hidSourceID" runat="server" />

ButtonImageButtonOnClientClick屬性上調用SetSource JavaScript函數

<script type = "text/javascript">
    function SetSource(SourceID)
    {
        var hidSourceID =
        document.getElementById("<%=hidSourceID.ClientID%>");
        hidSourceID.value = SourceID;
    }
</script>

在此之前,您可以非常輕松地在Page_Load檢查哪個Control導致回發:

if (IsPostBack)
{
    string CtrlName;
    CtrlName=hidSourceID.Value;
}

我遇到了同樣的麻煩,必須在Page_Load方法中做一些邏輯判斷來處理不同的事件(點擊了哪個按鈕)。 我意識到手臂得到如下例子。 前端aspx源代碼(我有許多ID為F2,F3,F6,F12的按鈕。

<Button Style="display: none" ID="F2" runat="server" Text="F2:Cancel" OnClientClick="SeiGyo(this)" OnClick="F2_Click" />
    <Button Style="display: none" ID="F3" runat="server" Text="F3:Return" OnClientClick="SeiGyo(this)" OnClick="F3_Click" />
    <Button Style="display: none" ID="F6" runat="server" Text="F6:Run" OnClientClick="SeiGyo(this)" OnClick="F6_Click" />
    <Button Style="display: none" ID="F12" runat="server" Text="F12:Finish" OnClientClick="SeiGyo(this)" OnClick="F12_Click" />

后端aspx.cs源代碼,我需要做的是判斷觸發Page_Load時單擊了哪個按鈕。 這似乎有點愚蠢,但有效。 在您的情況下,單擊按鈕將添加到dic中。 我希望這對某些人有所幫助。

Dictionary<string, string> dic = new Dictionary<string, string>();
foreach(var id in new string[]{"F2","F3","F6","F12"})
{
       foreach (var key in Request.Params.AllKeys)
                    {
                        if (key != null && key.ToString().Contains(id))
                            dic.Add(id, Request[key.ToString()].ToString()); 
                    }
}

按鈕的UniqueID將在Request.Form [“__ EVENTTARGET”]中

這個問題已在以下答案得到解答: ASP.NET:檢查page_load中的click事件

您可以嘗試使用隱藏字段。 在OnclientClick事件上創建客戶端事件並嘗試設置隱藏字段的值,可能是true或false,具體取決於條件。 在頁面加載時,您可以檢查“隱藏”字段的值。

function click()
{
// set the hidden field here
}

在頁面加載時,只需檢查值。

if(HiddenFieldName.Value=="true")
{
//perform the action
}
    private bool button1WasClicked = false;

    private void button1_Click(object sender, EventArgs e)
    {
        button1WasClicked = true;
    }


if ( button1WasClicked== false)
{
//do somthing
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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