我有一個主站模板,我的站點上的所有頁面都使用它。在模板中有一個空的面板。在頁面的代碼隱藏中,在我的Page_Load部分動態地在面板中創建一個imagebutton(調用數據庫以確定哪個按鈕應該通過我的控制器顯示)。在ASP.net中防止按鈕響應'Enter'
在使用此模板並在其上有表單的某些頁面上,按下Enter鍵會觸發此圖像按鈕上的click事件,而不是表單中的提交按鈕。有沒有一種簡單的方法來防止imagebutton點擊事件觸發,除非它被鼠標點擊?我在想一個JavaScript方法是一個黑客,尤其是因爲該按鈕甚至不存在於主模板中,直到在Page_Load上動態創建按鈕爲止(這很醜陋,因爲我不能簡單地使用<% =btnName.ClientId %>
來引用按鈕的名稱在我的aspx頁面)。
我試着設置圖像按鈕的超高tabindex,並沒有做任何事情。還要將該按鈕設置爲主模板面板上的DefaultButton,但這也不起作用。此外,我不想爲所有使用此模板的頁面添加屬性(有數百個)。從我的主模板中找到可全局運行的解決方案將是最佳選擇。
我會嘗試在這裏展示我們的示例:
我們必須在我們的系統中的每個頁面,讓你的明星頁作爲奪冠熱門之一的頂部的按鈕,排序的服務器側書籤系統。當頁面加載時,它會查看頁面是否是您最喜歡的頁面之一,如果是,則顯示一個金色星號,如果不是,則顯示一個灰色星號。點擊明星的圖像按鈕切換頁面最喜歡的狀態。
在我的主模板(FullMenu.master)我有這個面板
<asp:Panel runat="server" ID="pnlFavorite" style="display:inline;"></asp:Panel>
接下來是它創建按鈕並將其添加到面板上的主模板類:
public void InsertStarButton()
{
CreateStarButton();
pnl.Controls.Add(bright);
}
和
private void CreateStarButton()
{
bright = new ImageButton();
bright.ImageUrl = "~/resources/images/star.png";
bright.Height = new Unit(12, UnitType.Pixel);
bright.ID = "btnStar";
}
我之前嘗試過的,那是行不通的,是在InsertStarButton()
我加了一行pnl.DefaultButton = "btnStar"
,但是這並沒有改變頁面上的任何內容。即使我將光標閃爍在頁面表單上的文本框內,如果按下Enter鍵,星形按鈕也會觸發其單擊事件。
這很好,但沒有幫助我的問題。正如我在我原來的帖子中提到的,我有DefaultButton屬性集,但問題仍然存在。如果我在表單字段中輸入文本時按下Enter鍵,則Imagebutton點擊事件仍會觸發。 – kd7iwp 2010-05-13 23:57:14
你可以發佈一個演示該問題的示例項目嗎? – 2010-05-14 01:13:14
我添加了一些示例代碼。我希望我能夠以非常清晰的方式展示它,但不幸的是,這些代碼中的大部分跨越了各種接口和類,這樣就會有太多的代碼添加到這篇文章中。 – kd7iwp 2010-05-14 15:36:22