【问题标题】:Dynamically deleting span tags while preserving inner contents在保留内部内容的同时动态删除 span 标签
【发布时间】:2011-10-28 12:55:21
【问题描述】:

我正在创建一个自定义控件来为表单制作标签输入块。

以下代码独立运行:

<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标签内的label输入内容?

【问题讨论】:

  • 请不要在标题中添加“asp.net c#”之类的内容。它在标签中,这是它所属的地方。

标签: c# asp.net html


【解决方案1】:

默认情况下,它会尝试呈现一个父控件。因此,它将跨度呈现为该父标记。如果您的控件继承自 Web 控件,则可以调整标记名以呈现不同的控件 (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.tagname.aspx)。

或者,既然你不想要它,当你覆盖渲染方法时不要调用 base.Render() ,并且这样做:

protected virtual void OnRender(HtmlTextWriter writer)
{
    base.AddAttributesToRender(writer);

    //Render
    writer.RenderBeginTag("span");
    .
    .
}

我相信包装元素是使用 RenderBeginTag() 和 RenderEndTag() 渲染的;你也可以尝试覆盖这些并且什么都不做。

你也在使用什么基类?你是从 Label 继承的吗?

【讨论】:

    【解决方案2】:

    您是否尝试过覆盖 TagKey?

       protected override HtmlTextWriterTag TagKey
       {
          get { return HtmlTextWriterTag.Unknown; }
       }
    

    【讨论】:

      【解决方案3】:

      您应该尝试使用 Literal 控件而不是 Label 控件。

      Label 控件中的文本以 HTML 内部标记呈现,而 Literal 控件中的文本呈现为纯文本。

      【讨论】:

        猜你喜欢
        • 2018-10-06
        • 1970-01-01
        • 2017-04-06
        • 2019-10-03
        • 1970-01-01
        • 2011-06-08
        • 2017-01-12
        • 1970-01-01
        • 2013-07-02
        相关资源
        最近更新 更多