【发布时间】:2013-01-06 02:08:46
【问题描述】:
我有几个自定义用户控件(100 多个),它们都涉及通用格式,这基本上要求我们将用户控件包装在目标页面上的面板控件中。为简单起见,我想创建一个处理此问题的基本控件,因为每个自定义控件的几乎所有基本功能都是相同的。
我所做的是创建一个基类,在该基类中我创建一个私有面板控件,然后我覆盖 Render 以在 base.Render 周围生成面板前/后标签。
现在这很好用,因为我们关心的所有用户控件都继承了它,并且我们向继承的控件公开的少数格式项目按预期工作(宽度、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 属性访问它们吗?还是您尝试在 aspx 页面中配置这些选项?
-
不能从 Panel UserControl 继承吗?
标签: c# asp.net user-controls