8

カスタム コントロールを作成すると、常に HTML スパン要素としてレンダリングされます。たとえば、divに変更するにはどうすればよいですか?

4

3 に答える 3

8

次のように、WebControl からコントロールを派生させます。

public class MyCustomControl : WebControl {
    public MyCustomControl() : base(HtmlTextWriterTag.Div) {}
}

つまり、使用するタグを受け入れる基本クラスのコンストラクターを使用します。

于 2009-07-05T16:11:47.680 に答える
3

CompositeControl から派生する場合、タグ型を取るコンストラクターはありません。TagKey をオーバーライドすることもできます (試したことはありません) が、より柔軟なオプションは、RenderBeginTag メソッドをオーバーライドして、必要に応じて実行することです。基本クラスは "span" 開始要素をレンダリングしますが、基本クラス メソッドを呼び出す必要はありません。何もレンダリングしたくない場合は、何も呼び出す必要はありません (その場合、RenderEndTag もオーバーライドし、そこでも何も呼び出さないでください)。例えば、

public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.AddAttribute(HtmlTextWriterAttribute.Class, "reportViewer");
        writer.AddAttribute(HtmlTextWriterAttribute.Id, "QueryViewerWrapper");
        writer.RenderBeginTag(HtmlTextWriterTag.Div); 
    }

このコードは生成します

<div class="reportViewer" id="QueryViewerWrapper">

これは、私のこの特定の複合コントロール、ReportViewer コントロールをラップするクラスを持つ div に必要なものです。出力を見つけやすくするためだけに ID を含めます。

于 2013-08-07T21:04:12.613 に答える
0

私は通常、すべての複合コントロールを継承する独自の基本クラスを持っています。これに追加するプロパティの 1 つは ContainerElement です。公開されているため、開発者は必要な外部要素を選択できます。内部的には、ベース コントロールでのこのレンダリングを管理する TagKey プロパティを設定します。次のすべてをコントロール/基本クラスに追加します。

HtmlTextWriterTag 列挙内のすべての項目の inteli-help を持つ HTMLContainerElement を設定するだけです。

/// <summary>
/// Local variable for storing what the container element for the rendered control will be.
/// </summary>
private HtmlTextWriterTag hosTagKey = HtmlTextWriterTag.Span;

/// <summary>
/// HTMLContanerElement is the tag key used to set the controls outer html control which appears in the markup.
/// The default is a span, but you can change this to be any HTML control you choose.
/// </summary>
public HtmlTextWriterTag HTMLContainerElement
{
  get { return this.hosTagKey; }
  set { this.hosTagKey = value; }
}

/// <summary>
/// Makes it so this control is a "div" element instead of the
/// standard "span" element.
/// </summary>
protected override HtmlTextWriterTag TagKey
{
  get { return this.hosTagKey; }
}
于 2013-04-17T09:05:00.383 に答える