我有幾個自定義用戶控件(100+),它們都具有相同的格式,這基本上要求我們將用戶控件包裝在目標頁面上的面板控件中。爲了簡單起見,我想創建一個基本控件來處理這個問題,因爲幾乎所有的基本功能對於每個自定義控件都是相同的。UserControl在asp.net中表現得像一個面板
我做了什麼來完成這個任務是創建一個基類,在該基類內創建一個私人面板控件,然後我重寫Render以在base.Render周圍生成面板前/後標籤。
現在,這項工作非常好,因爲我們關心的所有用戶控件都繼承了這一點,並且我們公開的少量格式化項目(繼承控件按預期方式工作)(Width,CssClass等)。
我真正想要的是通過基類將所有面板控件項目公開到繼承控件,但不必正確顯示每個元素的屬性/方法。
關於最佳方法是什麼的任何想法?我只是不想手動實現每個面板屬性/方法。我們也使用設計時間屬性(第一個是CssClass和寬度),但我們一直在參加設計時間屬性的用戶...
我們有什麼作品,只是尋找更簡單/更好的解決方案。
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;
}
}
}
你不能直接通過Panel屬性訪問它們嗎?或者你是否想要在aspx頁面中配置這些選項? –
你不能從Panel UserControl繼承嗎? –