0

基本的なjQueryUIをテーマにしたコントロールとウィジェットの操作を簡単にするために、いくつかのWebサーバーコントロールを作成中です。この段階で行う必要があるのは、ハイパーリンクに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クラスでハイパーリンクを生成します。ただし、これも指定すると、 doubleクラス属性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

代わりに、継承された CssClass プロパティに css クラスを割り当て、基本クラスにレンダリングを処理させます。

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 に答える