2008-10-14 46 views
0

問候!從自定義服務器控件中的標記中刪除CSS類屬性

我已經創建了一個自定義按鈕呈現如下:

<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); 
    } 
} 

因爲我只需要設置CLAS s屬性的SPAN標籤,是否有可能不包括或「消除」INPUT標籤的類屬性?

回答

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屬性真的非常重要 - 在渲染之後?」),但是防止或減少副作用的影響總是一個好主意,例如上面的代碼通過消隱財產。

0

如何在渲染span開始標記之後從writer對象中刪除class屬性?雖然我不知道ASP,但我可能是錯的。

+0

不幸的是,編寫器對象沒有「RemoveAttribute」方法等。並調用writer.AddAttribute(HtmlTextWriterAttribute.Class,「」)實際上在INPUT標記中創建兩個CLASS屬性;一個是「btnOrange」作爲其值,另一個是空值。 – Bullines 2008-10-14 15:12:32

0

而不是調用基RenderBegin/RenderEnd方法,這本身將調用的AddAttributesToRender(從而增加class屬性),只需使輸入標記自己喜歡你與跨度做....

相關問題