我在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
答案 0 :(得分:0)
我遇到了与这些确切类相同的问题;我想为验证控件添加一些额外的功能。我最终共享一些公共代码的方式是实现我自己的类,这些类继承自验证器类,然后在实用程序类中实现共享逻辑。我不熟悉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);
}
}
你可以让这个论点比没有复制少量代码更有价值,但是如果你有更多,或者你的重复代码在某种程度上是复杂的,这是一种你可以共享的方式。另外,我使我的实用程序类保持静态,但是没有理由不这样做。