如何检查页面加载时是否单击 ASP.NET 按钮
本文关键字:是否 单击 ASP 按钮 NET 加载 何检查 检查 | 更新日期: 2023-09-27 18:31:12
如何检查特定按钮是否在 ASP.NET 中被点击?
我想我需要对Page_Load
执行一些操作。这不应该进入Button_Click
事件进行查找。有什么方法可以在客户端找到它被单击或不单击的位置并将其带到Page_Load
?
背景:基本上是__EVENTTARGET
和__EVENTARGUMENT
,当任何 Web 控件的任何自动回发属性设置为 true 时,这两个隐藏控件都会添加到 HTML 源代码中。
__EVENTTARGET
隐藏变量将告诉服务器,哪个控件实际上触发服务器端事件,以便框架可以为该控件触发服务器端事件。
__ EVENTARGUMENT
变量用于在应用程序需要时提供其他事件信息,这些信息可以在服务器中访问。
因此,我们可以使用以下方法轻松获取导致回发的控件: Request.Params.Get("__EVENTTARGET");
问题:
该方法:Request.Params.Get("__EVENTTARGET");
适用于CheckBoxes
、DropDownLists
、LinkButtons
等,但这不适用于按钮控件,如Buttons
和ImageButtons
Button
控件和ImageButton
控件不调用 __doPostBack
函数。因此,_EVENTTARGET
将始终为空。但是,其他控件使用 javascript 函数__doPostBack
来触发回发。
因此,我建议执行以下操作。向按钮添加 OnClientClick
属性。此外,在标记中定义一个隐藏字段,其值将包含导致回发的实际按钮。
<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" />
在Button
的 OnClientClick
属性上,ImageButton
调用 SetSource
JavaScript 函数
<script type = "text/javascript">
function SetSource(SourceID)
{
var hidSourceID =
document.getElementById("<%=hidSourceID.ClientID%>");
hidSourceID.value = SourceID;
}
</script>
从这里开始,您可以非常轻松地检查Page_Load
哪个控件导致了回发:
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());
}
}
的唯一 ID 将位于 Request.Form["__EVENTTARGET"]
此问题已在以下位置得到解答: ASP.NET : 检查page_load中的点击事件
您可以尝试使用隐藏字段。在 OnclientClick 事件上创建客户端事件,并尝试设置隐藏字段的值,根据条件,可能是真或假。在页面加载时,您可以检查Hiidden字段的值。
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
}