8

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

我想我需要对Page_Load. 这不应该进入Button_Click要查找的事件。有什么方法可以在客户端找到它被点击的位置并将其带到Page_Load哪里?

4

5 回答 5

16

背景:基本上 __EVENTTARGET__EVENTARGUMENT,这两个隐藏控件被添加到 HTML 源中,当任何 web 控件的任何 autopostback 属性设置为 true 时。

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

如果应用程序需要,该__ EVENTARGUMENT变量用于提供额外的事件信息,这些信息可以在服务器中访问。

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

问题:

该方法:Request.Params.Get("__EVENTTARGET");将适用于CheckBoxes, DropDownLists,LinkButtons等。但这不适用于 Button 控件,例如ButtonsImageButtons

Button控件和ImageButton控件不调用该函数__doPostBack。正因为如此,_EVENTTARGET永远都是空的。但是,其他控件使用 javascript 函数 __doPostBack来触发回发。

所以,我会建议做如下的事情。OnClientClick向按钮添加属性。此外,在您的标记中定义一个 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" />

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

<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;
}
于 2013-09-15T11:26:49.207 回答
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()); 
                    }
}
于 2017-04-20T06:08:39.787 回答
0

按钮的 UniqueID 将在 Request.Form["__EVENTTARGET"]

此问题已在以下位置得到解答:ASP.NET:检查 page_load 中的单击事件

于 2013-09-14T06:20:19.623 回答
0

您可以尝试使用隐藏字段。在 OnclientClick 事件上创建客户端事件并尝试设置隐藏字段的值,根据条件可能为真或假。在页面加载时,您可以检查 Hiidden 字段的值。

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

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

if(HiddenFieldName.Value=="true")
{
//perform the action
}
于 2013-09-15T12:06:40.283 回答
-1
    private bool button1WasClicked = false;

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


if ( button1WasClicked== false)
{
//do somthing
}
于 2013-09-14T07:00:59.600 回答