2010-05-13 37 views
0

我有一個主站模板,我的站點上的所有頁面都使用它。在模板中有一個空的面板。在頁面的代碼隱藏中,在我的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鍵,星形按鈕也會觸發其單擊事件。

回答

2
+0

這很好,但沒有幫助我的問題。正如我在我原來的帖子中提到的,我有DefaultButton屬性集,但問題仍然存在。如果我在表單字段中輸入文本時按下Enter鍵,則Imagebutton點擊事件仍會觸發。 – kd7iwp 2010-05-13 23:57:14

+0

你可以發佈一個演示該問題的示例項目嗎? – 2010-05-14 01:13:14

+0

我添加了一些示例代碼。我希望我能夠以非常清晰的方式展示它,但不幸的是,這些代碼中的大部分跨越了各種接口和類,這樣就會有太多的代碼添加到這篇文章中。 – kd7iwp 2010-05-14 15:36:22

0

在窗體上的單行文本框中輸入將提交表單。這就是它的工作原理。

+0

不,它沒有提交我的表單,它觸發了我的圖像按鈕上的點擊事件,這不在我的表單內。請重新閱讀我的初始文章。 – kd7iwp 2010-05-14 16:24:08

+0

哦,這個。這是一個IE6的錯誤,唯一的解決方法是在按鈕上使用javascript按鈕來禁用所有其他按鈕。 – Joshua 2010-05-16 22:50:04

+0

我從來沒有使用IE6的頁面,只有Firefox 3.6。 – kd7iwp 2010-05-17 15:18:17