Setting the default button for a nested control in ASP.NET

Published on 24 June, 2008 at 11:55

In ASP.NET 2.0, you can declaratively set which button which be "clicked" when the user presses the Enter key. This can be done on either the or tag, as follows:


<asp:Panel runat="server" DefaultButton="btnSubmit">
<asp:TextBox runat="server" ID="txtFirstName" />
<asp:Button runat="server" ID="btnSubmit" Text="Submit" />
</asp:Panel>

This works fine as long as the button control is directly contained within the Panel or form. However, if the button control is nested within a user control or any other control that implements INamingContainer, it will no longer work.

I discovered that you can still do this declaratively - but you need to use the relative ID. For the sake of argument, let's say that the button is contained within a CreateUserWizard control (this could be any control or user control though).

For this scenario, you'd need to set the DefaultButton property to the path relative to the Panel on which you're setting the DefaultButton. For example (note that "__CustomNav0" might need to be replaced - I get this ID because of a custom adapter I use on the CreateUserWizard control):


<asp:Panel runat="server" DefaultButton="cuwRegister$__CustomNav0$btnSubmit">
<asp:CreateUserWizard runat="server" ID="cuwRegister">
<WizardSteps>
<asp:CompleteWizardStep runat="server">
<CustomNavigationTemplate>
<asp:Button runat="server" ID="btnSubmit" Text="Submit" />
</CustomNavigationTemplate>
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
</asp:Panel>

I hope this helps somebody.

0 Comments Add your own

Add a New Comment

 


 

Comment Guidelines: Basic XHTML is allowed (a href, strong, em, code). Line breaks and paragraphs are automatically generated. Off-topic or inappropriate comments will be edited or deleted. Email addresses will never be published. Thanks.