0

我正在编写一些 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);
        }
    }
}

这可以正常工作并生成带有附加 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> 

帮助!我怎样才能阻止这种情况发生?

4

2 回答 2

5

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

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    CssClass = "fg-button ui-state-default ui-corner-all";
}
于 2009-11-11T16:15:42.480 回答
1

我想是因为这条线

base.AddAttributesToRender(writer);

如果 CssClass 属性有值,它会创建一个“类”属性。由于上面的代码呈现了控件中指定的所有属性。

尝试自己渲染控件。通过这种方式,您的代码可以控制呈现哪些属性,并且在 css 的情况下,您可以检查它是否已经具有值。如果它有一个值,您可以附加或丢弃它,以最适合您的需要为准。

希望能帮助到你。

于 2009-11-11T16:15:18.303 回答