0

ご挨拶!

以下をレンダリングするカスタム ボタン クラスを作成しました。

<span class="btnOrange">
    <input type="submit" id="ctl00_MainContent_m_GoBack" value="Back" name="ctl00$MainContent$m_GoBack"/>
</span>

ただし、代わりに次のようにレンダリングされます (INPUT タグの不要な「class」属性に注意してください)。

<span class="btnOrange">
    <input type="submit" class="btnOrange" id="ctl00_MainContent_m_GoBack" value="Back" name="ctl00$MainContent$m_GoBack"/>
</span>

私のカスタム ボタン クラスは次のようになります。

[ToolboxData(@"<{0}:MyButton runat=server></{0}:MyButton>")]
public class MyButton : Button
{
    public override void RenderBeginTag(HtmlTextWriter writer)
    {
       writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);   
       writer.RenderBeginTag("span");
       base.RenderBeginTag(writer);
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
       writer.RenderEndTag();
       base.RenderEndTag(writer);
    }
}

SPAN タグの class 属性を設定するだけでよいので、INPUT タグの class 属性を含めない、または「空白にする」ことはできますか?

4

3 に答える 3

1

あなたはこれを行うことができます:

private string _heldCssClass = null;
public override void RenderBeginTag(HtmlTextWriter writer)
{
   writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);   
   writer.RenderBeginTag("span");
   _heldCssClass = this.CssClass;
   this.CssClass = String.Empty;
   base.RenderBeginTag(writer);
}

public override void RenderEndTag(HtmlTextWriter writer)
{
   writer.RenderEndTag();
   base.RenderEndTag(writer);
   this.CssClass = _heldCssClass;
}

メソッド呼び出し間でプライベート変数に CssClass プロパティを保持する理由は、レンダリング中に副作用が発生しないようにするためです。これは、特定のコードでは重要ではないかもしれません (「CssClass プロパティは、レンダリング後に本当に重要ですか?」)。プロパティ。

于 2008-10-15T03:22:28.883 に答える
0

ベースの RenderBegin/RenderEnd メソッドを呼び出す代わりに、それ自体が AddAttributesToRender を呼び出します (それによってクラス属性を追加します)。

于 2008-10-15T22:53:28.613 に答える
0

開始タグをレンダリングした後class、オブジェクトから属性を削除するのはどうですか? ASPはよくわからないので間違っているかもしれません。writerspan

于 2008-10-14T15:00:51.020 に答える