C# ASP.NET默认按钮和母版页

C# ASP.NET默认按钮和母版页,c#,asp.net,forms,defaultbutton,C#,Asp.net,Forms,Defaultbutton,在我的网站中,我在母版页中有一个搜索功能(没有设置默认按钮,也没有在表单中设置)。在内容页面中,我有一个登录名,在那里我使用带有defaultbutton的asp面板。 但是,当我在登录文本框中单击enter时,我的站点会一直转到搜索事件处理程序。。。 原因可能是什么 一些代码: //on content page protected void Button1_Click(object sender, EventArgs e) { Response.Write(Button1.Text

在我的网站中,我在母版页中有一个搜索功能(没有设置默认按钮,也没有在表单中设置)。在内容页面中,我有一个登录名,在那里我使用带有defaultbutton的asp面板。 但是,当我在登录文本框中单击enter时,我的站点会一直转到搜索事件处理程序。。。 原因可能是什么

一些代码:

//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>
//在内容页上
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
响应。写入(按钮1.文本);
}
//在母版页上:
受保护的无效BTN搜索单击(对象发送者,事件参数e)
{
如果(!txtSearch.Text.Equals(“”)
{
Response.Redirect(“searchresults.aspx?search=“+txtSearch.Text”);
}
}

确定找到了解决方案:需要使用
按钮
,而不是
链接按钮
。然后就可以了……

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

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


发现问题,我认为需要使用
按钮
,而不是
链接按钮
。然后就可以了。

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


这应该可以满足您的需要。

我使用了
Page.Form.DefaultButton=pnl1.FindControl(“Button1”).UniqueID但它仍然会转到搜索事件句柄页面加载时搜索框上是否设置了焦点?在页面加载的TextBox1中设置焦点。如果您找到了解决方案,请将其添加为答案并接受它作为解决方案。我无法投票支持我自己的帖子…:你能为我做点什么吗你可以接受你自己的帖子作为解决方案。
<!-- 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>