问候!
我创建了一个自定义按钮类来呈现以下内容:
<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属性?
答案 0 :(得分: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属性真的那么重要 - 后渲染吗?”)但是防止或减少副作用的影响总是一个好主意,例如上面的代码通过消隐来展示财产。
答案 1 :(得分:0)
如何在呈现class
开始标记后从writer
对象中删除span
属性?我不知道ASP,所以我错了。
答案 2 :(得分:0)
而不是调用基本的RenderBegin / RenderEnd方法,它们本身将调用AddAttributesToRender(从而添加类属性),而只是自己呈现输入标记,就像使用span ...一样....