Создание собственного элемента управления гиперссылкой веб-сервера - проблемы с переопределением атрибута класса - PullRequest
0 голосов
/ 11 ноября 2009

Я нахожусь в процессе написания некоторых элементов управления веб-сервера, чтобы упростить работу с базовыми элементами управления и виджетами JQuery UI. Все, что мне нужно сделать на этом этапе, это добавить несколько дополнительных классов CSS в гиперссылки.

Код ниже - мой элемент управления веб-сервером.

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, то получится создать атрибут double class :

<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> 

Помогите! Как я могу предотвратить это?

Ответы [ 2 ]

5 голосов
/ 11 ноября 2009

Присвойте класс css унаследованному свойству CssClass и разрешите базовому классу обрабатывать рендеринг.

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    CssClass = "fg-button ui-state-default ui-corner-all";
}
1 голос
/ 11 ноября 2009

Я думаю из-за этой строки

base.AddAttributesToRender(writer);

Создает атрибут «класс», если атрибут CssClass имеет значение. Поскольку вышеприведенный код отображает все атрибуты, указанные в элементе управления.

Попробуйте отрендерить элемент управления самостоятельно. Таким образом, ваш код управляет отображаемыми атрибутами, а в случае css вы можете проверить, имеет ли оно значение или нет. Если оно имеет значение, вы можете добавить его или отказаться от него, в зависимости от того, что вам больше подходит.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...