23 Stimmen

Login-Kontrollschaltfläche abschicken, wenn ich Enter drücke

Ich habe eine ASP.NET-Webseite mit einem Login-Steuerelement darauf. Wenn ich die Eingabetaste drücke, wird die Anmeldeschaltfläche nicht ausgelöst; stattdessen wird die Seite abgeschickt und tut nichts.

Die Standardlösung für dieses Problem, die ich online gefunden habe, besteht darin, das Login-Steuerelement in ein Panel einzuschließen und dann die Standardschaltfläche des Panels festzulegen. Aber offenbar funktioniert das nicht so gut, wenn die Seite eine Masterseite hat. Ich habe versucht, die Standardschaltfläche im Code mit Kontrolle .ID, Kontrolle .ClientID, und Kontrolle .UniqueID, und in jedem Fall erhalte ich:

Der DefaultButton von panelName muss die ID eines Steuerelements vom Typ IButtonControl sein.

Ich bin sicher, es gibt eine Möglichkeit, dies mit JavaScript zu tun, aber ich würde wirklich gerne es mit einfachen alten C#-Code zu tun, wenn möglich. Ist es möglich?

34voto

Vassili Altynikov Punkte 2059

Dies sollte hilfreich sein: http://weblogs.asp.net/jgalloway/archive/2007/10/03/asp-net-setting-the-defaultbutton-for-a-login-control.aspx

Sie können die Schaltfläche in der Vorlage für das Login-Steuerelement wie folgt referenzieren:

DefaultButton="Login$LoginButton"

Grundsätzlich können Sie einen DefaultButton nicht nur auf der Formularebene, sondern auch auf der Ebene der einzelnen Panels definieren. Solange sich der Fokus innerhalb des Panels befindet, wird der Standardbutton für das Panel verwendet, wenn Sie "Enter" drücken.

8voto

EMP Punkte 54832

Großartige Antwort von Blend Master ! Im Wesentlichen verwenden Sie einfach Panel.DefaultButton, aber ich möchte die Verwirrung darüber, was genau Sie brauchen, um es zu setzen zu klären. Es ist nicht nur ".ID" oder ".UniqueID" - die Dokumentation ist ein bisschen fehlt auf diese.

Sie müssen ihn auf die UniqueID der Schaltfläche setzen, relativ zu den Namenscontainer UniqueID des Panels. Wenn die UniqueID Ihres Panels beispielsweise "Body$Content$pnlLogin" lautet und die UniqueID Ihrer Login-Schaltfläche "Body$Content$ucLogin$btnLogin" (weil sie sich in einem Steuerelement namens "ucLogin" befindet), müssen Sie Panel.DefaultButton auf "ucLogin$btnLogin" setzen.

Sie können dies im Code wie folgt ausrechnen. (Ich konnte keine Methode in der Klassenbibliothek dafür finden, aber lassen Sie mich wissen, wenn Sie eine finden).

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;
}

4voto

StingyJack Punkte 18514

Sie müssen beim Laden der Seite etwas wie dieses hinzufügen...

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

das Passwort-Textfeld hat ein onKeyPress-Attribut hinzugefügt, das ein doPostBack auf der Submit-Schaltfläche erzwingt, wenn die "Enter"-Taste gedrückt wird. Dies simuliert das Klicken auf die Schaltfläche "Submit".

2voto

roryf Punkte 28756

Hört sich an, als ob die Login-Schaltfläche ausgespuckt wird als <input type="button"> statt <input type="submit"> . Sie könnten jederzeit das LoginControl als Vorlage verwenden und die Schaltfläche "Senden" hinzufügen, um gleichzeitig das hässliche Standard-Markup loszuwerden!

Wenn Sie Javascript verwenden müssen, um dies zu beheben, läuft etwas ernsthaft schief! (aber es klingt, als wüssten Sie das)

2voto

qwebek Punkte 909

Yo, ich habe diese Lösung im Netz gefunden, sie hat bei mir funktioniert.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X