阻止按钮响应ASP.net中的“Enter”

时间:2010-05-13 23:32:06

标签: c# asp.net event-handling

我有一个主模板,我网站上的所有页面都使用。在模板中有一个空面板。在页面的代码隐藏中,在Page_Load部分中动态地在面板中创建了一个图像按钮(调用数据库以确定应该通过我的控制器显示哪个按钮)。

在某些使用此模板并在其上有表单的页面上,按Enter键会触发此图像按钮上的click事件,而不是表单中的提交按钮。是否有一种简单的方法可以防止图像按钮单击事件被触发,除非它被鼠标单击?我认为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 :(得分:2)

答案 1 :(得分:0)

在表单上的单行文本框中按 ENTER 将提交表单。这就是它的工作原理。