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

use*_*181 8 c# asp.net

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

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

R.C*_*R.C 15

背景:基本上 __EVENTTARGET__EVENTARGUMENT,这两个隐藏控件被添加到HTML源,当过任何的AutoPostBack属性被设置为true任何网络控制的.

__EVENTTARGET隐藏变量会告诉服务器,它控制实际执行服务器端事件触发,使这个框架可以触发该控制服务器端事件.

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

所以我们可以使用以下方法轻松获得导致回发的控件:Request.Params.Get("__EVENTTARGET");

问题:

方法:Request.Params.Get("__EVENTTARGET");将用于工作CheckBoxes,DropDownLists,LinkButtons,等等.但这并不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" />
Run Code Online (Sandbox Code Playgroud)

关于和调用JavaScript函数的OnClientClick属性ButtonImageButtonSetSource

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

在这里,您可以非常轻松地检查您的Page_Load哪个控件导致回发:

if (IsPostBack)
{
    string CtrlName;
    CtrlName=hidSourceID.Value;
}
Run Code Online (Sandbox Code Playgroud)


Wan*_*jun 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" />
Run Code Online (Sandbox Code Playgroud)

后端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()); 
                    }
}
Run Code Online (Sandbox Code Playgroud)