12

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

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

它看起来不像MSDN 中的 WebControl 类,但我想我会问,以防我错过了一些明显的东西。

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

4

3 回答 3

17

不,没有专门针对<p>. ALiteralControl或您提供的<p runat="server" />版本是您将获得的最接近的版本。

不过,您始终可以创建自己的控件。您可以创建一个实现 的类WebControl,并覆盖该Render方法:

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

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

以及所有 .NET Web 和服务器控件的列表:

于 2013-10-25T12:16:02.030 回答
5

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

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

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

请参见下面的代码:

    public class P : Label
    {
        public override void RenderBeginTag(HtmlTextWriter writer)
        {
            writer.RenderBeginTag("p");
        }
    }
于 2014-09-20T17:06:49.010 回答
0

尽管元素没有特殊的类<p>,但您可以使用它HtmlGenericControl来生成<p>标签,如下所示:

var p = new HtmlGenericControl("p");
于 2017-08-09T04:28:06.827 回答