12

簡単な質問ですが、検索が困難です (質問の主要部分が 1 文字であるため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 が使用している同様の手法を使用し始めた後、基本的に同じことを行い、問題を解決する、さらに簡単な手法を見つけました。ただし、上記のソリューションと比較すると、1 つの利点があります。それは、コントロール全体を自分でレンダリングする必要がないことです。

基本的に、あなたがする必要があるのは次のことだけです:

  • 独自のコントロールを作成し、Label コントロールなどから継承します。
  • メソッドをオーバーライドしRenderBeginTag()ます。
  • 独自のタグを記述しますp
  • 終了タグは自動的に書き込まれます。
  • 新しいタグがデフォルトのタグに置き換わります (spanこの例では)。

以下のコードを参照してください。

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