私はいくつかのカスタムユーザーコントロール(100以上)を持っていますが、それらはすべて共通のフォーマットが含まれているため、基本的にユーザーコントロールを宛先ページのパネルコントロールでラップする必要があります。簡単にするために、これを処理する基本コントロールを作成したかったのは、ほとんどすべての基本機能が各カスタムコントロールで同じであるためです。
これを実現するために私が行ったことは、基本クラスを作成し、その基本クラス内にプライベートパネルコントロールを作成してから、Renderをオーバーライドして、base.Renderの周りにパネルのpre/postタグを生成することです。
これは、これを継承している関心のあるすべてのユーザーコントロールと、継承されたコントロールに公開したいくつかのフォーマット項目(Width、CssClassなど)が期待どおりに機能するため、うまく機能します。
私が本当に望んでいるのは、すべてのパネルコントロールアイテムを基本クラスを介して継承されたコントロールに公開することですが、各要素を公開するためにプロパティ/メソッドを正しくする必要はありません。
これに対する最善のアプローチは何かについてのアイデアはありますか?すべてのパネルプロパティ/メソッドを手動で実装したくありません。設計時の属性も使用しますが(1つ目はCssClassとWidthです)、設計時の属性をユーザーに提供しています...
私たちが持っているものはうまくいき、より簡単でより良い解決策を探しています。
using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public class BaseUserControl : System.Web.UI.UserControl
{
private Panel _panel;
private bool _isPanelLoaded;
public Panel Panel
{
get
{
if (_panel == null)
{
_panel = new Panel();
_isPanelLoaded = true;
}
return _panel;
}
}
public BaseUserControl()
{
}
protected override void Render(HtmlTextWriter writer)
{
if (_isPanelLoaded)
{
Panel.RenderBeginTag(writer);
base.Render(writer);
Panel.RenderEndTag(writer);
}
else
{
base.Render(writer);
}
}
public Unit Width
{
get
{
if (Panel.Width.IsEmpty)
{
return 0;
}
return Panel.Width;
}
set
{
Panel.Width = value;
}
}
public string CssClass
{
get
{
return Panel.CssClass;
}
set
{
Panel.CssClass = value;
}
}
}