[英]UserControl to behave like a panel in asp.net
我有幾個自定義用戶控件(超過100個),都涉及一種通用格式,這基本上需要我們將用戶控件包裝在目標頁面上的面板控件中。 為簡單起見,我想創建一個處理此問題的基本控件,因為幾乎所有基本功能對於每個自定義控件都是相同的。
為此,我要做的是創建一個基類,在該基類內創建一個私有面板控件,然后重寫Render以在base.Render周圍生成面板前/后標簽。
現在,這非常有用,因為我們關心的所有用戶控件都繼承了此控件,而我們已經向繼承的控件公開的少數格式化項可以按預期工作(Width,CssClass等)。
我真正想要的是通過基類將所有面板控件項公開給繼承的控件,而不必修改屬性/方法來公開每個元素。
關於什么是最佳方法的任何想法? 我只是不想手動實現每個面板屬性/方法。 我們也使用設計時間屬性(第一個是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;
}
}
}
為了公開所有屬性,您必須從Panel控件繼承。 由於具有面板屬性,因此可以在該屬性上設置屬性。 要在標記中定義它們是一個挑戰...對於大多數簡單對象,如果為屬性賦予<PersistenceMode(PersistenceMode.Attribute)>
屬性,則可以訪問Panel-CssClass
的語法中的屬性,但是我不知道這對您是否有用,因為Panel是一個控件。 很好嘗試。
實質上,您是在談論編寫包含所需屬性的屬性,因此,如果前一種解決方案不起作用,則最好這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.