具有相同修改的自定义控件验证器
custom control validator with same modification
我对3种BaseValidator做了同样的修改。我正在寻找一种删除重复代码的方法。
我为 RequiredFieldValidator 、 RegularExpressionValidator 和 CustomValidator 做了相同的代码
Public Class CustomValidator
Inherits System.Web.UI.WebControls.CustomValidator
Protected Overrides Sub Render(writer As HtmlTextWriter)
Try
If Not String.IsNullOrWhiteSpace(ControlToValidate) Then
Dim ctv As Control = Me.FindControl(ControlToValidate)
writer.AddAttribute("for", ctv.ClientID)
End If
Catch
End Try
MyBase.Render(writer)
End Sub
Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag
Get
Return HtmlTextWriterTag.Label
End Get
End Property
End Class
我 运行 遇到了与这些 class 完全相同的问题;我想向验证控件添加一些附加功能。我最终共享一些公共代码的方式是实现我自己的 classes,它继承自验证器 classes,然后在实用程序 class 中实现共享逻辑。我不熟悉VB,所以请耐心等待C#示例。
public static class ValidationUtilities
{
public static void AddFor(Control validationControl, string controlToValidate, HtmlTextWriter writer)
{
if (!string.IsNullOrWhiteSpace(controlToValidate))
{
var ctv = validationControl.FindControl(controlToValidate);
writer.AddAddtribute("for", ctv.ClientID);
}
}
}
class MyRegularExpressionValidator : RegularExpressionValidator
{
protected override void Render(HtmlTextWriter writer)
{
ValidationUtilities.AddFor(this, ControlToValidate, writer);
}
}
class MyRequiredFieldValidator : RequiredFieldValidator
{
protected override void Render(HtmlTextWriter writer)
{
ValidationUtilities.AddFor(this, ControlToValidate, writer);
}
}
您可以提出这样的论点,即不复制少量代码会带来更多工作,但如果您有更多代码,或者您复制的代码在某种程度上很复杂,那么您可以通过这种方式分享它。此外,我将我的实用程序 class 设为静态,但没有理由不这样做。
我对3种BaseValidator做了同样的修改。我正在寻找一种删除重复代码的方法。
我为 RequiredFieldValidator 、 RegularExpressionValidator 和 CustomValidator 做了相同的代码
Public Class CustomValidator
Inherits System.Web.UI.WebControls.CustomValidator
Protected Overrides Sub Render(writer As HtmlTextWriter)
Try
If Not String.IsNullOrWhiteSpace(ControlToValidate) Then
Dim ctv As Control = Me.FindControl(ControlToValidate)
writer.AddAttribute("for", ctv.ClientID)
End If
Catch
End Try
MyBase.Render(writer)
End Sub
Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag
Get
Return HtmlTextWriterTag.Label
End Get
End Property
End Class
我 运行 遇到了与这些 class 完全相同的问题;我想向验证控件添加一些附加功能。我最终共享一些公共代码的方式是实现我自己的 classes,它继承自验证器 classes,然后在实用程序 class 中实现共享逻辑。我不熟悉VB,所以请耐心等待C#示例。
public static class ValidationUtilities
{
public static void AddFor(Control validationControl, string controlToValidate, HtmlTextWriter writer)
{
if (!string.IsNullOrWhiteSpace(controlToValidate))
{
var ctv = validationControl.FindControl(controlToValidate);
writer.AddAddtribute("for", ctv.ClientID);
}
}
}
class MyRegularExpressionValidator : RegularExpressionValidator
{
protected override void Render(HtmlTextWriter writer)
{
ValidationUtilities.AddFor(this, ControlToValidate, writer);
}
}
class MyRequiredFieldValidator : RequiredFieldValidator
{
protected override void Render(HtmlTextWriter writer)
{
ValidationUtilities.AddFor(this, ControlToValidate, writer);
}
}
您可以提出这样的论点,即不复制少量代码会带来更多工作,但如果您有更多代码,或者您复制的代码在某种程度上很复杂,那么您可以通过这种方式分享它。此外,我将我的实用程序 class 设为静态,但没有理由不这样做。