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

fre*_*ler 12 asp.net .net-4.0 asp.net-webcontrol

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

在ASP.NET中,<asp:Panel/>呈现为<div></div>块,<asp:Label/>呈现为<span></span>块...是否有一个呈现为<p></p>块的?

它从WebDN控件类的MSDN看起来不像它,但我想如果我错过了一些明显的东西我会问.

(我意识到显而易见的解决方案是只使用<p runat="server" id="p1"></p>和使用通用的html控件类)

Cᴏʀ*_*ᴏʀʏ 15

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

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

protected override void Render(HtmlTextWriter output)
{
   output.WriteFullBeginTag("p");
   output.Write(this.Text);
   output.WriteEndTag("p");
}
Run Code Online (Sandbox Code Playgroud)

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

这里列出了所有.NET Web和服务器控件:


aah*_*orn 5

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

基本上你需要做的就是以下几点:

  • 创建自己的控件,例如从Label控件继承.
  • 覆盖该RenderBeginTag()方法.
  • 写你自己的标签,例如p.
  • 结束标记将自动写入.
  • 您的新标记现在将替换默认标记(span在此示例中).

见下面的代码:

    public class P : Label
    {
        public override void RenderBeginTag(HtmlTextWriter writer)
        {
            writer.RenderBeginTag("p");
        }
    }
Run Code Online (Sandbox Code Playgroud)