如何在页面加载时检查是否单击了ASP.NET按钮

时间:2013-09-14 06:16:39

标签: c# asp.net

如何检查ASP.NET中是否单击了某个特定按钮?

我想我需要在Page_Load上执行一些操作。这不应该进入Button_Click事件来查找。有什么方法可以找到客户端点击或不点击它的位置并将其带到Page_Load

5 个答案:

答案 0 :(得分:14)

后台:基本上__EVENTTARGET__EVENTARGUMENT,当任何网络的任何autopostback属性设置为true时,这两个隐藏控件都会添加到HTML源代码中控制。

__EVENTTARGET隐藏变量将告诉服务器,哪个控件实际上执行了服务器端事件触发,以便框架可以触发该控件的服务器端事件。

如果应用程序需要,__ EVENTARGUMENT变量用于提供其他事件信息,可以在服务器中访问。

因此,我们可以使用:Request.Params.Get("__EVENTTARGET");

轻松获取导致回发的控件

问题:

方法:Request.Params.Get("__EVENTTARGET");适用于CheckBoxesDropDownListsLinkButtons等。但这不适用于Button控件等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" />

OnClientClickButton的{​​{1}}媒体资源上调用ImageButton JavaScript函数

SetSource

此后,您可以非常轻松地检查<script type = "text/javascript"> function SetSource(SourceID) { var hidSourceID = document.getElementById("<%=hidSourceID.ClientID%>"); hidSourceID.value = SourceID; } </script> 哪个控件导致回发:

Page_Load

答案 1 :(得分:2)

我遇到了同样的麻烦,必须在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()); 
                    }
}

答案 2 :(得分:0)

按钮的UniqueID将在Request.Form [“__ EVENTTARGET”]

此问题已在ASP.NET : Check for click event in page_load

处得到解答

答案 3 :(得分:0)

您可以尝试使用隐藏字段。在OnclientClick事件上创建客户端事件并尝试设置隐藏字段的值,可能是true或false,具体取决于条件。 在页面加载时,您可以检查Hiidden字段的值。

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

在页面加载时,只需检查值。

if(HiddenFieldName.Value=="true")
{
//perform the action
}

答案 4 :(得分:-1)

    private bool button1WasClicked = false;

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


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