ASP.NET TextBox LostFocus event

asp.net, custom-event, lost-focus, textbox

Solution

I have found a blog which seems to give a pretty decent solution to this. It involves adding a custom event to a TextBox subclass, and registering a client script which calls the server-side event in the onblur JavaScript client event.

The following is my implementation in VB:

Public Class MyTextBox
    Inherits TextBox
    Implements IPostBackEventHandler

    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        MyBase.OnInit(e)
        If Not Page.ClientScript.IsClientScriptBlockRegistered("OnBlurTextBoxEvent") Then
            Page.ClientScript.RegisterStartupScript(MyBase.GetType, "OnBlurTextBoxEvent", GetScript, True)
            Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')")
        End If
    End Sub

    Public Delegate Sub OnBlurDelegate(ByVal sender As Object, ByVal e As EventArgs)

    Public Event Blur As OnBlurDelegate

    Protected Sub OnBlur()
        RaiseEvent Blur(Me, EventArgs.Empty)
    End Sub

    Private Function GetScript() As String
        Return "function OnBlurred(control, arg)" & vbCrLf & _
                "{" & vbCrLf & _
                "    __doPostBack(control, arg);" & vbCrLf & _
                "}"
    End Function

    Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
        OnBlur()
    End Sub
End Class

Problem

I need to trigger code on the server side to be called when a TextBox loses focus. I know there is the onblur client side event, and that there is no LostFocus event, so how can I cause a postback to occur when my TextBox loses focus? Update: I have found a blog which seems to give a pretty decent solution to this. It involves adding a custom event to a TextBox subclass, and registering a client script which calls the server-side event in the onblur JavaScript client event. The following is my implementation in VB: ``` Public Class MyTextBox Inherits TextBox Implements IPostBackEventHandler Protected Overrides Sub OnInit(ByVal e As System.EventArgs) MyBase.OnInit(e) If Not Page.ClientScript.IsClientScriptBlockRegistered("OnBlurTextBoxEvent") Then Page.ClientScript.RegisterStartupScript(MyBase.GetType, "OnBlurTextBoxEvent", GetScript, True) Attributes.Add("onblur", "OnBlurred('" & UniqueID & "','')") End If End Sub Public Delegate Sub OnBlurDelegate(ByVal sender As Object, ByVal e As EventArgs) Public Event Blur As OnBlurDelegate Protected Sub OnBlur() RaiseEvent Blur(Me, EventArgs.Empty) End Sub Private Function GetScript() As String Return "function OnBlurred(control, arg)" & vbCrLf & _ "{" & vbCrLf & _ " __doPostBack(control, arg);" & vbCrLf & _ "}" End Function Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent OnBlur() End Sub End Class ```

Original source