我正在创建一个自定义控件来为表单创建标签输入块。
以下代码可单独使用:
<label id="custom_calendar_label" class="required" for="custom_calendar">Calendar thing: </label>
<input id="custom_calendar" type="date" required="required" aria-labelledby="custom_calendar_label">
但是当我使用自定义服务器控件来构建它时,无论出于何种原因,自定义控件周围的span标签都会自动生成(而不是来自我的自定义控件中的任何代码),
所以我的代码看起来像
<span id ="custom_calendar">
<label id="custom_calendar_label" class="required" for="custom_calendar">Calendar thing: </label>
<input id="custom_calendar" type="date" required="required" aria-labelledby="custom_calendar_label">
</span>
如何动态删除span标记,但保留span标记内的标签输入内容?
答案 0 :(得分:1)
默认情况下,它会尝试渲染一个父控件。所以它渲染一个span作为父标记。如果控件继承自Web控件,则可以调整标记名以呈现不同的控件(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.tagname.aspx)。
或者,因为你不想要它,所以在覆盖render方法时不要调用base.Render(),并执行:
protected virtual void OnRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
//Render
writer.RenderBeginTag("span");
.
.
}
我相信包装器元素使用RenderBeginTag()和RenderEndTag()进行渲染;你可以尝试重写那些也无所事事。
您使用的基类是什么?你是继承自Label吗?
答案 1 :(得分:0)
您是否尝试过覆盖TagKey?
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Unknown; }
}
答案 2 :(得分:0)
您应该尝试使用Literal控件而不是Label控件。
Label控件中的文本在HTML内部标记中呈现,但Literal控件中的文本呈现为纯文本。