ASP.NET 默认按钮和母版页

5
在我的网站中,主页面有一个搜索功能(没有设置默认按钮,也没有在表单中设置)。在内容页面中,我有一个登录功能,其中使用了带有默认按钮的asp面板。 但是当我在登录文本框上点击回车键时,我的网站会继续执行搜索事件处理程序... 可能的原因是什么?
一些代码:
//on content page

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Write(Button1.Text);
}

    <asp:Panel ID="pnl1" runat="server" DefaultButton="Button1">
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <asp:LinkButton ID="Button1" runat="server" Text="Button1" OnClick="Button1_Click" />
    </asp:Panel>

//on master page:

protected void btnSearch_Click(object sender, EventArgs e)
{
    if (!txtSearch.Text.Equals(""))
    {
        Response.Redirect("searchresults.aspx?search=" + txtSearch.Text);
    }
}

<div id="searchbar">
    <asp:TextBox ID="txtSearch" CssClass="searchbar-field" runat="server"></asp:TextBox>
    <asp:Button ID="btnSearch" CssClass="searchbar-btn" runat="server" Text="Zoek" OnClick="btnSearch_Click" />
</div>

好的,我找到了解决方案:需要使用Button而不是LinkButton。这样就可以了...


如果您找到了解决方案,请将其添加为答案并接受它作为解决方案。 - Zach Green
我不能为自己的帖子投票... :p 你能替我投吗? - Ozkan
1
您可以将自己的帖子标记为解决方案。 - Zach Green
3个回答

2

页面加载时,您只需设置页面上的默认按钮:

您可以使用面板的FindControl方法(这是VB)访问按钮。

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Me.Form.DefaultButton = pnl1.FindControl("Button1").UniqueID

End Sub

我使用了 Page.Form.DefaultButton = pnl1.FindControl("Button1").UniqueID; 但它仍然跳转到搜索事件处理程序。 - Ozkan
页面加载时,焦点是否被设置在搜索框上?请在页面加载时将焦点设置在 TextBox1 中。 - Ira Rainey

2

发现问题,我认为需要使用Button而不是LinkButton。然后一切都应该没问题了。


0
在加载登录控件的任何页面的标记中,您需要在两个位置更新HTML。
首先,在页面的表单标记中,您需要设置默认按钮。请参见下面我是如何想出名称的。
<form id="form1" runat="server" defaultbutton="ucLogin$btnSubmit">

(命名:美元符号前的ucLogin部分需要是您登录控件的ID,就像在页面中进一步声明的那样。btnSubmit部分需要是按钮的ID,就像在登录控件的HTML中命名的那样)
接下来,您需要将登录控件的声明包装在一个面板中,并设置其DefaultButton属性:
<!-- Login Control - use a panel so we can set the default button -->
<asp:Panel runat="server" ID="loginControlPanel" DefaultButton="ucLogin$btnSubmit">                         
     <uc:Login runat="server" ID="ucLogin"/>                                                    
</asp:Panel>

这应该对你有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接