ASP.NET DefaultButton and MasterPages

本文关键字:MasterPages and DefaultButton NET ASP | 更新日期: 2023-09-27 17:57:30

在我的网站中,我在主页面中有一个搜索功能(没有设置默认按钮,也没有表单)。在一个内容页面中,我有一个登录名,在那里我使用一个带有defaultbutton的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>

OK找到了解决方案:需要使用Button而不是LinkButton。那就应该没事了

ASP.NET DefaultButton and MasterPages

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

您可以使用面板的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

发现问题,我认为需要使用Button而不是LinkButton。那就应该没事了。

在加载登录控件的任何页面的标记中,您需要在两个位置更新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>

这应该对你有用。