web-dev-qa-db-de.com

Lost Focus-Methode für asp.net-Textbox?

Wie schreibe ich die Lost-Fokus-Methode für die Asp.net-Textmethode? Bitte hat jemand eine Idee, dies zu schreiben, mit mir zu teilen?

25
James123

Ich weiß, dass jeder den grundsätzlichen Ansatz auf der Clientseite gezeigt hat, und das ist in Ordnung, aber ich wollte zumindest eine Lösung für die Behandlung eines bestimmten clientseitigen Ereignisses auf dem Server zeigen.

Schauen wir uns den Code an und gehen ihn Stück für Stück durch.

Da ASP.Net TextBox kein serverseitiges Ereignis für OnBlur verfügbar macht, müssen Sie dies manuell tun. Zum Glück ist das ziemlich leicht zu erreichen. Angenommen, Sie haben dieses kleine bisschen Code in Ihrer ASPX-Seite. Sie möchten eine Label Control-Serverseite aktualisieren, wenn die TextBox den Fokus verliert.

<asp:Label ID="lblOnBlur" runat="server">On Blur Example</asp:Label><br />
<asp:TextBox ID="tbOnBlur" runat="server" ClientIDMode="Static" /><br />
<asp:Label ID="lblOutput" runat="server" />

ASP.Net verfügt über eine integrierte clientseitige Funktion , die zum Auslösen von Postbacks aufgerufen wird, die zwei Parameter benötigt:

  1. Ziel (die ID des Steuerelements, das das Ereignis verursacht)
  2. Argument (optionale Informationen, die Sie an den Server weitergeben möchten) 

Sie könnten verdrahten das Ereignis einfach in Markup, indem Sie das folgende Attribut und den folgenden Wert zu Ihrer TextBox hinzufügen:

onblur="__doPostBack('tbOnBlur','OnBlur');"

Das Framework bietet jedoch eine einfache Möglichkeit, dieses Skript für Ihre Serverseite zu generieren. Fügen Sie in Ihrer PageInit-Methode einfach einen Aufruf zu GetPostBackEventReference hinzu, und weisen Sie ihn dem Attribut "onblur" zu:

protected void Page_Init(object sender, EventArgs e)
{
    var onBlurScript = Page.ClientScript.GetPostBackEventReference(tbOnBlur, "OnBlur");
    tbOnBlur.Attributes.Add("onblur", onBlurScript);
}

Bei Standard-Serversteuerungsereignissen wird die Ereignisverdrahtung und das Aufrufen von Ereignissen für Sie automatisiert, indem Sie IPostBackEventHandler implementieren. Das ist eine Menge Arbeit für eine einmalige Lösung, also können wir sie einfach manuell bearbeiten, indem Sie die Anforderungsparameter überprüfen.

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        var ctrlName = Request.Params[Page.postEventSourceID];
        var args = Request.Params[Page.postEventArgumentID];

        HandleCustomPostbackEvent(ctrlName, args);
    }
}

private void HandleCustomPostbackEvent(string ctrlName, string args)
{
    //Since this will get called for every postback, we only
    // want to handle a specific combination of control
    // and argument.
    if (ctrlName == tbOnBlur.UniqueID && args == "OnBlur")
    {
        lblOutput.Text = "On Blur Event Handled Server Side!" + DateTime.Now;
    }
}

Am Ende ist es nicht besonders schwierig, serverseitige Ereignisse zu simulieren, wenn Sie nichts dagegen haben, sich ein wenig mit dem Framework zu beschäftigen.

Hoffe das hilft!

Prost,
Josh

35
Josh

Wenn der Server etwas tun soll, nachdem das Textfeld den Fokus verliert, können Sie AutoPostback = "True" hinzufügen. Wenn Sie nicht möchten, dass das Postback die gesamte Seite neu lädt, verwenden Sie ein UpdatePanel:

    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" 
                            OnTextChanged="TextBox1_TextChanged" />
        </ContentTemplate>
    </asp:UpdatePanel>

Die Funktion TextBox1_TextChanged kann dann etwas mit dem Text (serverseitig) tun.

15
Willem
if (!Page.IsPostBack)
    {
        txtName.Attributes.Add("onblur","alert('Hello world')");
    }
4
Zo Has

Warum benutzt du das nicht? Lostfocus funktioniert genauso mit:

OnTextChanged="TextBox_TextChanged"
0
elfekz