是否有<p>标签的ASP.NET WebControl?</p>

时间:2013-10-25 12:13:38

标签: asp.net .net-4.0 asp.net-webcontrol

简单的问题,难以搜索(由于问题的主要部分是单个字母p)!

在ASP.NET中,<asp:Panel/>呈现为<div></div>块,<asp:Label/>呈现为<span></span>块...是否有呈现为{{1}的块1}}阻止?

MSDN for the WebControl class看起来并不像,但我想如果我错过了一些明显的东西,我会问。

(我意识到显而易见的解决方案是使用<p></p>并使用通用的html控件类)

3 个答案:

答案 0 :(得分:15)

不,没有专门针对<p>的内置控件。您提供的LiteralControl<p runat="server" />版本是您最接近的版本。

但是,你总是可以创建你自己的控件。您可以创建一个实现WebControl的类,并覆盖Render方法:

protected override void Render(HtmlTextWriter output)
{
   output.WriteFullBeginTag("p");
   output.Write(this.Text);
   output.WriteEndTag("p");
}

有关如何编写自己的服务器控件的更多说明:

此处列出了所有.NET Web和服务器控件:

答案 1 :(得分:5)

我有完全相同的问题。在我开始使用Cory在这里使用的类似技术之后,我发现了一个更简单的技术,它基本上做同样的事情并解决了你的问题。但是,与上述解决方案相比,它有一个好处:您不必自己渲染整个控件。

基本上您需要做的就是:

  • 创建您自己的控件,继承,例如来自Label控件。
  • 覆盖RenderBeginTag()方法。
  • 编写自己的标记,例如p
  • 结束标记将自动写入。
  • 您的新标记现在将替换默认标记(本例中为span)。

见下面的代码:

    public class P : Label
    {
        public override void RenderBeginTag(HtmlTextWriter writer)
        {
            writer.RenderBeginTag("p");
        }
    }

答案 2 :(得分:0)

虽然<p>元素没有特殊类,但您可以使用HtmlGenericControl生成<p>标记,如下所示:

var p = new HtmlGenericControl("p");