Estoy trabajando con un MasterPage, el cual tiene un campo de texto y un ImageButton para efectuar una búsqueda en el sitio web.

Tengo una página de Inicio de Sesión, la cual está basada en el MasterPage. Cuando tecleó nombre de usuario y contraseña, y oprimo Enter, en lugar de enviarse el formulario del login, se envía el formulario del MasterPage porque toma precedencia sobre el formulario del login.

Después de investigar en Google, llegué al siguiente código:

El control de Login no tiene nada de especial:

  1. <asp:Content ID="Content1" ContentPlaceHolderID="Cuerpo" Runat="Server">
  2.  
  3.     <asp:Login ID="Login1" runat="server" DisplayRememberMe="False" FailureText="Datos incorrectos, inténtelo nuevamente."
  4.        LoginButtonText="Entrar" PasswordLabelText="Contraseña:" TitleText="Inicio de sesión"
  5.        UserNameLabelText="Nombre de usuario:" LoginButtonImageUrl="~/Images/Botones/b_iniciarSesion.jpg" LoginButtonType="Image">
  6.     </asp:Login>
  7.    
  8. </asp:Content>

En el código de servidor de esa misma página, en el evento Load, coloca lo siguiente:

  1. Login1.Focus()
  2. Dim FormaPpal As HtmlForm = Master.FindControl("form1")
  3. Dim Boton As ImageButton = Login1.FindControl("LoginImageButton")
  4. If Not FormaPpal Is Nothing And Not Boton Is Nothing Then
  5.     FormaPpal.DefaultButton = Boton.UniqueID
  6. End If

Estamos estableciendo la propiedad DefaultButton del control Form en el botón del Login. Por cierto, esta propiedad también existe en el control Panel, podría ser útil en algún otro caso. Esta propiedad está diciendo que cuando se oprima la tecla Enter, se debe realizar la misma acción que cuando se hace clic en el botón indicado.

form1 es el nombre del formulario que aparece en el MasterPage

LoginImageButton no aparece en ninguna parte, pero es el nombre que se le da por default al botón de submit, ya que yo utilicé un botón de imagen.

En caso de que uses un botón regular utiliza Button en la declaración y LoginButton en el FindControl (línea 3).

Ahora bien, todo arreglado con el Login, pero cuando intento hacer una búsqueda tecleando una palabra en el campo de búsqueda (que vive en el MasterPage) y oprimo la tecla Enter, entonces se intenta enviar el formulario de inicio de sesión.

Además, en todas las otras páginas basadas en el MasterPage (y que no contienen el Login) cuando tecleo una palabra de búsqueda y oprimo Enter solamente se hace un postback, pero no se efectúa la búsqueda.

Para solucionar el problema, basta abrir el MasterPage y establecer dicha propiedad:

  1. <form id="form1" runat="server" DefaultButton="BotonIr">

BotonIr es mi botón que al ser oprimido envía a la página que realiza la búsqueda.

¡Listo! 😀

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


nueve × = 54