我已經創建了一些從文本框繼承的自定義文本框。 對於下一步我想用包裝器註冊JavaScript。使用裝飾模式爲asp.net控件
裝飾模式允許我做,如果我只能從文本框繼承它並將自定義文本框作爲構造函數參數傳遞。
問題是,當我向aspx頁面添加控件或基本上如何使用asp.net控件的裝飾器模式時,如何使用構造函數。
編輯:
簡單,這是我的驗證基類(IField是一種驗證接口,這可以忽略不計。):
public abstract class ValidationBase : TextBox, IField
{
private readonly IField _field;
protected ValidationBase(IField field)
{
_field = field;
}
public int MinLength
{
get { return _field.MinLength; }
set { _field.MinLength = value; }
}
public bool Required
{
get { return _field.Required; }
set { _field.Required = value; }
}
// other porperties etc...
protected override void OnPreRender(EventArgs e)
{
// DO SOME STUFF...
base.OnPreRender(e);
}
}
這是我的具體類(EmailField是一個具體的IMPL。 IField的忽略...):
public class ValidationEmail : ValidationBase
{
public ValidationEmail()
: base(new EmailField(string.Empty))
{
}
}
最後,我想實現這個(我已經打定了主意在寫字板,這不可能是精確的IMPL):
public class JsRegisterDecorator : ValidationBase
{
private readonly ValidationBase _validationObj;
//I am not quite sure about the constructor but i can handle
public JsRegisterDecorator(ValidationBase concreteValidationObj)
: base(concreteValidationObj)
{
_validationObj = concreteValidationObj;
}
//Wrap the properties
protected override void OnPreRender(EventArgs e)
{
//Register JS Files...
_validationObj.OnPreRender(e);
}
}
問題是我該如何使用這個裝飾器?由於自動asp.net構造控制:(?我在哪裏可以把構造函數參數)
<vc:ValidationEmail ID="ValidationEmail1" runat="server"/>
我不知道我可以用這個:
<vc:JsRegisterDecorator ID="ValidationEmailWithJs1" runat="server"/>
您能否詳細說明您的特殊情況?你想用Decorator模式實現控制,你試圖做什麼或嘗試什麼? – 2013-05-05 10:03:05
@AlexanderManekovskiy感謝您的評論。我已經更新了我的問題。 – pilavust 2013-05-05 22:39:35