创建我自己的Web服务器超链接控件 - 覆盖类属性的问题

Pet*_*ger 0 c# asp.net custom-server-controls

我正在编写一些Web服务器控件,以便更轻松地使用基本的jQuery UI主题控件和小部件.我在这个阶段需要做的就是在超链接中添加一些额外的CSS类.

下面的代码是我的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好,并生成一个带有其他CSS类的超链接.但是,如果我还指定CssClass它最终创建一个double类属性:

<Fusion.UI:Hyperlink ID="Hyperlink1" runat="server" NavigateUrl="#" CssClass="ui-state-disabled" >Link</Fusion.UI:Hyperlink>
Run Code Online (Sandbox Code Playgroud)

这会生成以下HTML:

<a class="fg-button ui-state-default ui-corner-all" id="ctl00_cphMainContent_Hyperlink1" class="ui-state-disabled" href="#">Link</a> 
Run Code Online (Sandbox Code Playgroud)

救命!我怎么能阻止这种情况发生?

PHe*_*erg 5

将css类分配给继承的CssClass属性,让基类处理呈现.

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    CssClass = "fg-button ui-state-default ui-corner-all";
}
Run Code Online (Sandbox Code Playgroud)