编写自定义控件时,它始终呈现为 HTML span 元素。例如,如何将其更改为 div?
问问题
1311 次
3 回答
8
从 WebControl 派生控件,如下所示:
public class MyCustomControl : WebControl {
public MyCustomControl() : base(HtmlTextWriterTag.Div) {}
}
也就是说,使用接受要使用的标记的基类构造函数。
于 2009-07-05T16:11:47.680 回答
3
如果您从 CompositeControl 派生,则没有采用标记类型的构造函数。你可以重写 TagKey(我没试过),但更灵活的选择是重写 RenderBeginTag 方法,让它做你想做的事。基类呈现一个“span”打开元素,但您不必调用基类方法。如果您不想渲染任何内容,则无需调用任何内容(在这种情况下,还要覆盖 RenderEndTag 并且也不在那里调用任何内容)。例如,
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, "reportViewer");
writer.AddAttribute(HtmlTextWriterAttribute.Id, "QueryViewerWrapper");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
}
此代码产生
<div class="reportViewer" id="QueryViewerWrapper">
这正是我的这个特定复合控件所需要的,一个带有类的 div 来包装 ReportViewer 控件。我包含 ID 只是为了使输出更容易被发现。
于 2013-08-07T21:04:12.613 回答
0
我通常有自己的基类,我的所有复合控件都继承自该基类。我添加的属性之一是 ContainerElement。公开展示,开发人员可以选择他们想要的任何外部元素。在内部,它设置了 TagKey 属性,该属性控制基本控件上的此呈现。以下所有内容到您的控件/基类。
您只需要设置 HTMLContainerElement ,它将具有 HtmlTextWriterTag 枚举中所有项目的 inteli-help。
/// <summary>
/// Local variable for storing what the container element for the rendered control will be.
/// </summary>
private HtmlTextWriterTag hosTagKey = HtmlTextWriterTag.Span;
/// <summary>
/// HTMLContanerElement is the tag key used to set the controls outer html control which appears in the markup.
/// The default is a span, but you can change this to be any HTML control you choose.
/// </summary>
public HtmlTextWriterTag HTMLContainerElement
{
get { return this.hosTagKey; }
set { this.hosTagKey = value; }
}
/// <summary>
/// Makes it so this control is a "div" element instead of the
/// standard "span" element.
/// </summary>
protected override HtmlTextWriterTag TagKey
{
get { return this.hosTagKey; }
}
于 2013-04-17T09:05:00.383 回答