[英]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");
將適用於CheckBoxes
, DropDownLists
, LinkButtons
等..但這不適用於按鈕控件,如Buttons
和ImageButtons
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" />
在Button
和ImageButton
的OnClientClick
屬性上調用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.