0

问候!

我创建了一个自定义按钮类来呈现以下内容:

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

但是,它呈现为这样(注意 INPUT 标记中无关的“类”属性):

<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 标签设置类属性,是否可以不包含或“删除” INPUT 标签的类属性?

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

渲染开始标签后如何class从对象中删除属性?虽然我不知道 ASP 所以我可能是错的。writerspan

于 2008-10-14T15:00:51.020 回答
0

而不是调用基本的 RenderBegin/RenderEnd 方法,它们本身将调用 AddAttributesToRender (从而添加类属性),只需像处理 span 一样自己渲染输入标签......

于 2008-10-15T22:53:28.613 回答