Custom text box with required field validator, regular expression validators
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls
<DefaultProperty("Text"), ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")> _
Public Class TextBox
Inherits System.Web.UI.WebControls.TextBox
#Region "Private/Public/Shared variables"
' private variables
Private _text As String = String.Empty
' reg ex validator properties
Private _textType As ENums.TextType
Private _typeText As String = String.Empty
Private _typeDisplay As ValidatorDisplay = ValidatorDisplay.None
Private _typeVisible As Boolean = True
Private _typeEnabled As Boolean = True
Private _typeEnableClientScript As Boolean = True
Private _typeEnableViewState As Boolean
Private _typeCssClass As String = String.Empty
Private _typeErrorMessage As String = " Is Invalid"
Private _typeSpecialChars As String = String.Empty
'required field validator properties
Private _isRequired As Boolean
Private _requiredErrorMessage As String = " Is Required"
Private _requiredText As String = " *"
Private _requiredDisplay As ValidatorDisplay = ValidatorDisplay.Static
Private _requiredVisible As Boolean = True
Private _requiredEnabled As Boolean = True
Private _requiredEnableClientScript As Boolean = True
Private _requiredEnableViewState As Boolean
Private _requiredCssClass As String = String.Empty
Private _requiredShowTextAlways As Boolean = True
' private controls
Private requiredValidate As RequiredFieldValidator
Private regExpValidate As RegularExpressionValidator
#End Region
#Region "Properties"
#Region "Property Overrides"
<Bindable(True), Category("Appearance"), DefaultValue("")> _
Public Overrides Property [Text]() As String
Get
Return _text
End Get
Set(ByVal Value As String)
_text = Value
End Set
End Property
#End Region
#Region "Custom properties"
<Bindable(True), Category("Validate"), DefaultValue(" Is Required")> _
Public Property RequiredErrorMessage() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredErrorMessage") Is Nothing Then
Return Convert.ToString(ViewState("RequiredErrorMessage"))
Else
Return _requiredErrorMessage
End If
Else
Return _requiredErrorMessage
End If
End Get
Set(ByVal Value As String)
Try
_requiredErrorMessage = Value
If Me.EnableViewState Then
ViewState("RequiredErrorMessage") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.ErrorMessage = Value
End If
Catch
_requiredErrorMessage = String.Empty
If Me.EnableViewState Then
ViewState("RequiredErrorMessage") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property IsRequired() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("IsRequired") Is Nothing Then
Return Convert.ToBoolean(ViewState("IsRequired"))
Else
Return _isRequired
End If
Else
Return _isRequired
End If
End Get
Set(ByVal Value As Boolean)
Try
_isRequired = Value
If Me.EnableViewState Then
ViewState("IsRequired") = Value
End If
If Value Then
If requiredValidate Is Nothing Then
requiredValidate = New RequiredFieldValidator
requiredValidate.ControlToValidate = Me.ClientID
requiredValidate.Display = _requiredDisplay
requiredValidate.ErrorMessage = RequiredErrorMessage
requiredValidate.Text = _requiredText
requiredValidate.EnableClientScript = _requiredEnableClientScript
requiredValidate.Enabled = _requiredEnabled
requiredValidate.Visible = _requiredVisible
requiredValidate.EnableViewState = _requiredEnableViewState
requiredValidate.CssClass = _requiredCssClass
Me.Controls.Add(requiredValidate)
End If
Else
If Not requiredValidate Is Nothing Then
Me.Controls.Remove(requiredValidate)
requiredValidate = Nothing
End If
End If
Catch
_isRequired = False
If Me.EnableViewState Then
ViewState("IsRequired") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(" *")> _
Public Property RequiredText() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredText") Is Nothing Then
Return Convert.ToString(ViewState("RequiredText"))
Else
Return _requiredText
End If
Else
Return _requiredText
End If
End Get
Set(ByVal Value As String)
Try
_requiredText = Value
If Me.EnableViewState Then
ViewState("RequiredText") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Text = _requiredText
End If
Catch
_requiredText = String.Empty
If Me.EnableViewState Then
ViewState("RequiredText") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredShowTextAlways() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredShowTextAlways") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredShowTextAlways"))
Else
Return _requiredShowTextAlways
End If
Else
Return _requiredShowTextAlways
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredShowTextAlways = Value
If Me.EnableViewState Then
ViewState("RequiredShowTextAlways") = Value
End If
Catch
_requiredShowTextAlways = True
If Me.EnableViewState Then
ViewState("RequiredShowTextAlways") = True
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ValidatorDisplay.Static)> _
Public Property RequiredDisplay() As ValidatorDisplay
Get
If Me.EnableViewState Then
If Not ViewState("RequiredDisplay") Is Nothing Then
Return CType(ViewState("RequiredDisplay"), ValidatorDisplay)
Else
Return _requiredDisplay
End If
Else
Return _requiredDisplay
End If
End Get
Set(ByVal Value As ValidatorDisplay)
Try
_requiredDisplay = Value
If Me.EnableViewState Then
ViewState("RequiredDisplay") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Display = Value
End If
Catch
_requiredDisplay = ValidatorDisplay.None
If Me.EnableViewState Then
ViewState("RequiredDisplay") = ValidatorDisplay.None
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredVisible() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredVisible") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredVisible"))
Else
Return _requiredVisible
End If
Else
Return _requiredVisible
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredVisible = Value
If Me.EnableViewState Then
ViewState("RequiredVisible") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Visible = _requiredVisible
End If
Catch
_requiredVisible = False
If Me.EnableViewState Then
ViewState("RequiredVisible") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredEnabled() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnabled") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnabled"))
Else
Return _requiredEnabled
End If
Else
Return _requiredEnabled
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnabled = Value
If Me.EnableViewState Then
ViewState("RequiredEnabled") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Enabled = _requiredEnabled
End If
Catch
_requiredEnabled = False
If Me.EnableViewState Then
ViewState("RequiredEnabled") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredEnableClientScript() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnableClientScript") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnableClientScript"))
Else
Return _requiredEnableClientScript
End If
Else
Return _requiredEnableClientScript
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnableClientScript = Value
If Me.EnableViewState Then
ViewState("RequiredEnableClientScript") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.EnableClientScript = _requiredEnableClientScript
End If
Catch
_requiredEnableClientScript = False
If Me.EnableViewState Then
ViewState("RequiredEnableClientScript") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property RequiredEnableViewState() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnableViewState") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnableViewState"))
Else
Return _requiredEnableViewState
End If
Else
Return _requiredEnableViewState
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnableViewState = Value
If Me.EnableViewState Then
ViewState("RequiredEnableViewState") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.EnableViewState = _requiredEnableViewState
End If
Catch
_requiredEnableViewState = False
If Me.EnableViewState Then
ViewState("RequiredEnableViewState") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property RequiredCSSClass() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredCssClass") Is Nothing Then
Return Convert.ToString(ViewState("RequiredCssClass"))
Else
Return _requiredCssClass
End If
Else
Return _requiredCssClass
End If
End Get
Set(ByVal Value As String)
Try
_requiredCssClass = Value
If Me.EnableViewState Then
ViewState("RequiredCssClass") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.CssClass = _requiredCssClass
End If
Catch
_requiredCssClass = String.Empty
If Me.EnableViewState Then
ViewState("RequiredCssClass") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ValidatorDisplay.Static)> _
Public Property TypeDisplay() As ValidatorDisplay
Get
If Me.EnableViewState Then
If Not ViewState("TypeDisplay") Is Nothing Then
Return CType(ViewState("TypeDisplay"), ValidatorDisplay)
Else
Return _typeDisplay
End If
Else
Return _typeDisplay
End If
End Get
Set(ByVal Value As ValidatorDisplay)
Try
_typeDisplay = Value
If Me.EnableViewState Then
ViewState("TypeDisplay") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.Display = _typeDisplay
End If
Catch
_typeDisplay = ValidatorDisplay.None
If Me.EnableViewState Then
ViewState("TypeDisplay") = ValidatorDisplay.None
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property TypeVisible() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeVisible") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeVisible"))
Else
Return _typeVisible
End If
Else
Return _typeVisible
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeVisible = Value
If Me.EnableViewState Then
ViewState("TypeVisible") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.Visible = _typeVisible
End If
Catch
_typeVisible = False
If Me.EnableViewState Then
ViewState("TypeVisible") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property TypeEnabled() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeEnabled") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeEnabled"))
Else
Return _typeEnabled
End If
Else
Return _typeEnabled
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeEnabled = Value
If Me.EnableViewState Then
ViewState("TypeEnabled") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.Enabled = _typeEnabled
End If
Catch
_typeEnabled = False
If Me.EnableViewState Then
ViewState("TypeEnabled") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property TypeEnableClientScript() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeEnableClientScript") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeEnableClientScript"))
Else
Return _typeEnableClientScript
End If
Else
Return _typeEnableClientScript
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeEnableClientScript = Value
If Me.EnableViewState Then
ViewState("TypeEnableClientScript") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.EnableClientScript = _typeEnableClientScript
End If
Catch
_typeEnableClientScript = False
If Me.EnableViewState Then
ViewState("TypeEnableClientScript") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property TypeEnableViewState() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeEnableViewState") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeEnableViewState"))
Else
Return _typeEnableViewState
End If
Else
Return _typeEnableViewState
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeEnableViewState = Value
If Me.EnableViewState Then
ViewState("TypeEnableViewState") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.EnableViewState = _typeEnableViewState
End If
Catch
_typeEnableViewState = False
If Me.EnableViewState Then
ViewState("TypeEnableViewState") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property TypeCssClass() As String
Get
If Me.EnableViewState Then
If Not ViewState("TypeCssClass") Is Nothing Then
Return Convert.ToString(ViewState("TypeCssClass"))
Else
Return _typeCssClass
End If
Else
Return _typeCssClass
End If
End Get
Set(ByVal Value As String)
Try
_typeCssClass = Value
If Me.EnableViewState Then
ViewState("TypeCssClass") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.CssClass = _typeCssClass
End If
Catch
_typeCssClass = String.Empty
If Me.EnableViewState Then
ViewState("TypeCssClass") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property TypeSpecialChars() As String
Get
If Me.EnableViewState Then
If Not ViewState("TypeSpecialChars") Is Nothing Then
Return Convert.ToString(ViewState("TypeSpecialChars"))
Else
Return _typeSpecialChars
End If
Else
Return _typeSpecialChars
End If
End Get
Set(ByVal Value As String)
Try
_typeSpecialChars = Value
If Me.EnableViewState Then
ViewState("TypeSpecialChars") = Value
End If
If Not regExpValidate Is Nothing Then
If _textType = ENums.TextType.AlphanumericSpecialChars Then
regExpValidate.ValidationExpression = "[a-zA-Z0-9" & _typeSpecialChars & "]*"
End If
End If
Catch
_typeSpecialChars = String.Empty
If Me.EnableViewState Then
ViewState("TypeSpecialChars") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(" Is Invalid")> _
Public Property TypeErrorMessage() As String
Get
If Me.EnableViewState Then
If Not ViewState("TypeErrorMessage") Is Nothing Then
Return Convert.ToString(ViewState("TypeErrorMessage"))
Else
Return _typeErrorMessage
End If
Else
Return _typeErrorMessage
End If
End Get
Set(ByVal Value As String)
Try
_typeErrorMessage = Value
If Me.EnableViewState Then
ViewState("TypeErrorMessage") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.ErrorMessage = _typeErrorMessage
End If
Catch
_typeErrorMessage = String.Empty
If Me.EnableViewState Then
ViewState("TypeErrorMessage") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ENums.TextType.All)> _
Public Property TextType() As ENums.TextType
Get
If Me.EnableViewState Then
If Not ViewState("TextType") Is Nothing Then
Return CType(ViewState("TextType"), ENums.TextType)
Else
Return _textType
End If
Else
Return _textType
End If
End Get
Set(ByVal Value As ENums.TextType)
Try
_textType = Value
If Me.EnableViewState Then
ViewState("TextType") = Value
End If
SetRegEx(Value)
Catch
_textType = ENums.TextType.All
If Me.EnableViewState Then
ViewState("TextType") = ENums.TextType.All
End If
End Try
End Set
End Property
#End Region
#End Region
#Region "Methods/Functions/Sub"
Private Sub SetRegEx(ByVal Value As ENums.TextType)
If Value <> ENums.TextType.All Then
If regExpValidate Is Nothing Then
regExpValidate = New RegularExpressionValidator
regExpValidate.ControlToValidate = Me.ClientID
Me.Controls.Add(regExpValidate)
End If
regExpValidate.CssClass = _typeCssClass
regExpValidate.Display = _typeDisplay
regExpValidate.EnableClientScript = _typeEnableClientScript
regExpValidate.Enabled = _typeEnabled
regExpValidate.EnableViewState = _typeEnableViewState
regExpValidate.ErrorMessage = _typeErrorMessage
regExpValidate.Text = _typeText
Select Case Value
Case ENums.TextType.Alphabhets
regExpValidate.ValidationExpression = "[a-zA-Z]*"
Case ENums.TextType.Alphanumeric
regExpValidate.ValidationExpression = "[a-zA-Z0-9]*"
Case ENums.TextType.AlphanumericSpecialChars
regExpValidate.ValidationExpression = "[a-zA-Z0-9" & _typeSpecialChars & "]*"
Case ENums.TextType.Decimals
regExpValidate.ValidationExpression = "\d*\.{0,1}\d+"
Case ENums.TextType.Email
regExpValidate.ValidationExpression = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
Case ENums.TextType.Numeric
regExpValidate.ValidationExpression = "\d*"
Case Else
Me.Controls.Remove(regExpValidate)
regExpValidate = Nothing
End Select
Else
If Not regExpValidate Is Nothing Then
Me.Controls.Remove(regExpValidate)
regExpValidate = Nothing
End If
End If
End Sub
#End Region
#Region "Overrides"
Protected Overrides Sub OnInit(ByVal e As EventArgs)
MyBase.OnInit(e)
End Sub
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
If Me.ReadOnly Then
_isRequired = False
_textType = ENums.TextType.All
If Not requiredValidate Is Nothing Then
Me.Controls.Remove(requiredValidate)
requiredValidate = Nothing
End If
If Not regExpValidate Is Nothing Then
Me.Controls.Remove(regExpValidate)
regExpValidate = Nothing
End If
' to make it look like a label
Me.BorderWidth = WebControls.Unit.Pixel(0)
MyBase.Render(output)
'output.Write("<span id=""" & Me.ClientID & """>" & Me.Text & "</span>")
Else
MyBase.Render(output)
If Not requiredValidate Is Nothing Then
If Me._requiredShowTextAlways Then
If Me._requiredCssClass.Length > 0 Then
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span class=""" & Me._requiredCssClass & """>" & Me._requiredText & "</span>")
Else
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span style=""color:Red"">" & Me._requiredText & "</span>")
End If
requiredValidate.Text = String.Empty
requiredValidate.Display = ValidatorDisplay.None
End If
If String.Compare(requiredValidate.ControlToValidate, String.Empty, False) = 0 Then
requiredValidate.ControlToValidate = Me.ClientID
End If
requiredValidate.RenderControl(output)
End If
If Not regExpValidate Is Nothing Then
If String.Compare(regExpValidate.ControlToValidate, String.Empty, False) = 0 Then
regExpValidate.ControlToValidate = Me.ClientID
End If
regExpValidate.RenderControl(output)
End If
End If
End Sub
Protected Overrides Sub AddAttributesToRender(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
' this is added to trim values in text areas to max length
If Me.MaxLength > 0 And Me.TextMode = TextBoxMode.MultiLine Then
writer.AddAttribute("onblur", _
"this.value = this.value.slice(0," & Me.MaxLength & ");")
End If
End Sub
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
If Not savedState Is Nothing Then
MyBase.LoadViewState(savedState)
Me.IsRequired = Me.IsRequired
End If
End Sub
#End Region
End Class
Public Class ENums
Public Enum TextType
All
Alphabhets
Alphanumeric
AlphanumericSpecialChars
Numeric
Decimals
Email
End Enum
End Class
No comments:
Post a Comment