2009-11-11 40 views
0

我正在編寫一些Web服務器控件,以使基本的jQuery UI主題控件和小部件更容易工作。在這個階段我需要做的是在超鏈接中添加一些額外的CSS類。創建我自己的Web服務器超鏈接控件 - 覆蓋類屬性的問題

下面的代碼是我的Web服務器控件。

using System; 
using System.ComponentModel; 
using System.Security.Permissions; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace Fusion.UI.Controls 
{ 
    [ 
    ToolboxData("<{0}:Hyperlink runat=\"server\"></{0}:Hyperlink>") 
    ] 
    public class Hyperlink : System.Web.UI.WebControls.HyperLink 
    { 
     protected override void AddAttributesToRender(HtmlTextWriter writer) 
     { 
      writer.AddAttribute(HtmlTextWriterAttribute.Class, "fg-button ui-state-default ui-corner-all"); 

      // Call underlying renderer 
      base.AddAttributesToRender(writer); 
     } 
    } 
} 

這工作正常,並生成超鏈接與額外的CSS類。但是,如果我還指定了CssClass它結束了創建雙類屬性

<Fusion.UI:Hyperlink ID="Hyperlink1" runat="server" NavigateUrl="#" CssClass="ui-state-disabled" >Link</Fusion.UI:Hyperlink> 

產生下面的HTML:

<a class="fg-button ui-state-default ui-corner-all" id="ctl00_cphMainContent_Hyperlink1" class="ui-state-disabled" href="#">Link</a> 

幫助!我該如何阻止這種情況的發生?

+0

奇怪的是,不會讓我補充我的回答是:'( – JustLoren 2009-11-11 16:14:23

+2

哦我會覆蓋RenderBeginTag和手動將相關類追加到的CssClass,然後信任底層控制,以正確地呈現自身較少的工作各地。 :D – JustLoren 2009-11-11 16:17:33

回答

5

改爲將css類指派給繼承的CssClass屬性,並讓基類處理渲染。

protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 
    CssClass = "fg-button ui-state-default ui-corner-all"; 
} 
+0

需要: 保護覆蓋無效OnPreRender(EventArgs e) CssClass =「fg-button ui-state-default ui-corner-all」+ CssClass; base.OnPreRender(e); } 但謝謝你的答案:) – 2009-11-12 09:35:22

1

我想是因爲這條線

base.AddAttributesToRender(writer); 

這是創造一個「類」屬性,如果屬性的CssClass具有價值。由於上述代碼呈現控件中指定的所有屬性。

嘗試自己渲染控件。這樣,你的代碼控制着什麼屬性被渲染,在css的情況下,你可以檢查它是否已經有值。如果它有價值,您可以追加或丟棄它,以符合您的需求爲準。

希望它有幫助。

+0

自己渲染控件並不是真的需要解決這個問題,只要你在屬性中設置了必要的數據,HyperLink基類就可以提供所需的渲染能力 – PHeiberg 2009-11-11 16:23:08