visual salir preguntar personalizados mensaje mandar formulario ejemplos cerrar cancelar botones boton automaticamente antes c# asp.net .net login-control defaultbutton

salir - messagebox c# ejemplos



Enviar el botón de control de inicio de sesión cuando presiono Entrar (9)

Tengo una página web ASP.NET con un control de inicio de sesión en ella. Cuando presiono Enter, el botón Iniciar sesión no se dispara; en su lugar, la página envía, sin hacer nada.

La solución estándar para esto que encontré en línea es encerrar el control de inicio de sesión en un Panel, luego establecer el botón predeterminado del Panel. Pero aparentemente eso no funciona tan bien si la página tiene una página maestra. Intenté configurar el botón predeterminado en el código con control .ID, control .ClientID y control .UniqueID, y en cada caso obtengo:

El DefaultButton de panelName debe ser el ID de un control de tipo IButtonControl.

Estoy seguro de que hay una manera de hacer esto con JavaScript, pero realmente me gustaría hacerlo con el viejo y sencillo código C # si es posible. ¿Es posible?


Esto debería ser útil: http://weblogs.asp.net/jgalloway/archive/2007/10/03/asp-net-setting-the-defaultbutton-for-a-login-control.aspx

Puede usar lo siguiente para hacer referencia al botón dentro de la plantilla de control de inicio de sesión:

DefaultButton="Login$LoginButton"

Básicamente, puede definir un DefaultButton no solo en el nivel Formulario, sino también en el nivel del Panel individual, siempre que el foco esté dentro del panel, el botón predeterminado para el panel se usará si presiona "Enter"


tienes que agregar algo como esto en la carga de la página ...

txtPassword.Attributes.Add("onKeyPress", "javascript:if (event.keyCode == 13) __doPostBack(''" + lnkSubmit.UniqueID + "'','''')")

el cuadro de texto de la contraseña tiene un atributo onKeyPress agregado que forzará un doPostBack en el botón de enviar si se presiona la tecla "Enter". Esto simula hacer clic en el botón enviar.


Yo, encontré esta solución en la red, funcionó para mí.

<asp:Panel ID="panelLogin" runat="server" DefaultButton="Login1$LoginButton"> <asp:Login ID="Login1" runat="server" > <LayoutTemplate> ... <asp:Button ID="LoginButton" .../> </LayoutTemplate> </asp:Login> </asp:Panel>


Asumiendo Login1 es la ID de su control de inicio de sesión.

Para ''ingresar'' en cualquier lugar de la página para enviar, agregue a init en su código subyacente:

protected void Page_Init(object sender, EventArgs e) { this.Form.DefaultButton = Login1.FindControl("LoginButton").UniqueID; }

Para ''enter'' para enviar solo cuando DefaultButton="Login1$LoginButton" dentro del control de inicio de sesión, ajuste el control de inicio de sesión en un asp: Panel y configure DefaultButton="Login1$LoginButton" en el panel

Ambos enfoques funcionan bien con páginas maestras.


Para agregar un poco más de detalle e instrucciones a las publicaciones de arriba, aquí hay un tutorial:

En el marcado de cualquier página que cargue su control de inicio de sesión, debe actualizar el html en dos lugares.

Primero, en la etiqueta de formulario de la página, debe configurar el botón predeterminado. Vea a continuación cómo se me ocurrió el nombre.

<form id="form1" runat="server" defaultbutton="ucLogin$btnSubmit">

(Denominación: La parte ucLogin antes del signo de dólar debe ser la ID de su control de inicio de sesión, como se declara más abajo en su página. La parte btnSubmit debe ser la ID del botón como se nombra en el html del control de inicio de sesión)

A continuación, debe ajustar la declaración de su control de inicio de sesión en un panel y establecer su propiedad DefaultButton también:

<!-- 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>

Eso debería hacerlo por ti.


¡Gran respuesta de Blend Master ! Esencialmente solo use Panel.DefaultButton, pero quiero aclarar la confusión acerca de qué exactamente necesita configurarlo. No es solo ".ID" o ".UniqueID": la documentación es un poco insuficiente en esto.

Debe establecerlo en UniqueID del botón, en relación con UniqueID del contenedor de nombres del Panel. Por ejemplo, si su panel UniqueID es "Body $ Content $ pnlLogin" y el UniqueID de su botón de inicio de sesión es "Body $ Content $ ucLogin $ btnLogin" (porque está dentro de un control llamado "ucLogin"), entonces debe configurar Panel.DefaultButton para "ucLogin $ btnLogin".

Puede resolver esto en el código de la siguiente manera. (No pude encontrar ningún método de biblioteca de clase para esto, pero avíseme si encuentra uno).

void SetDefaultButton(Panel panel, IButtonControl button) { string uniqueId = ((Control)button).UniqueID; string panelIdPrefix = panel.NamingContainer.UniqueID + Page.IdSeparator; if (uniqueId.StartsWith(panelIdPrefix)) { uniqueId = uniqueId.Substring(panelIdPrefix.Length); } panel.DefaultButton = uniqueId; }


En función de sus buenas respuestas, hizo un control personalizado que
permite que una página tenga varios botones predeterminados según el panel que esté enfocado.
Anula el método OnLoad del Panel y la propiedad DefaultButton.

public class DefaultButtonPanel:Panel { protected override void OnLoad(EventArgs e) { if(!string.IsNullOrEmpty(DefaultButton)) { LinkButton btn = FindControl(DefaultButton) as LinkButton; if(btn != null) { Button defaultButton = new Button {ID = DefaultButton.Replace(Page.IdSeparator.ToString(), "_") + "_Default", Text = " "}; defaultButton.Style.Add("display", "none"); PostBackOptions p = new PostBackOptions(btn, "", null, false, true, true, true, true, btn.ValidationGroup); defaultButton.OnClientClick = Page.ClientScript.GetPostBackEventReference(p) + "; return false;"; Controls.Add(defaultButton); DefaultButton = defaultButton.ID; } } base.OnLoad(e); } /// <summary> /// Set the default button in a Panel. /// The UniqueID of the button, must be relative to the Panel''s naming container UniqueID. /// /// For example: /// Panel UniqueID is "Body$Content$pnlLogin" /// Button''s UniqueID is "Body$Content$ucLogin$btnLogin" /// (because it''s inside a control called "ucLogin") /// Set Panel.DefaultButton to "ucLogin$btnLogin". /// </summary> /// <param name="panel"></param> /// <param name="button"></param> public override string DefaultButton { get { return base.DefaultButton; } set { string uniqueId = value; string panelIdPrefix = this.NamingContainer.UniqueID + Page.IdSeparator; if (uniqueId.StartsWith(panelIdPrefix)) { uniqueId = uniqueId.Substring(panelIdPrefix.Length); } base.DefaultButton = uniqueId; } } }


Parece que el botón de inicio de sesión se escupió como <input type="button"> lugar de <input type="submit"> . Siempre puedes crear una plantilla en el LoginControl y agregar el botón de enviar, ¡deshazte de la horrible etiqueta predeterminada al mismo tiempo!

Si tiene que usar Javascript para arreglar esto, ¡algo está muy mal! (pero entonces parece que lo sabes)


Se proporciona una solución incrustando el control de inicio de sesión dentro del control del panel y configurando el defaultbutton del panel en la Parent$ID del botón dentro de Control de inicio de sesión. Ahí está el código:

<asp:Panel id="panel1" runat="server" DefaultButton="Login1$LoginButton"> <asp:Login ID="Login1" runat="server" BackColor="#F7F6F3"> <LayoutTemplate> <table> ... <tr> <td><asp:Button ID="LoginButton" runat="server" /></td> </tr> </table> </LayoutTemplate> </asp:Login> </asp:Panel>