Переопределение свойства HyperLink.Text не работает правильно - PullRequest
0 голосов
/ 01 июня 2011

Я пытаюсь работать с подклассом System.Web.UI.WebControls.HyperLink в C #, и я хочу иметь возможность указать текстовое свойство по умолчанию, которое будет заменять текстовое значение в определенных условиях.

public class MyHyperLink : HyperLink
{
    public string DefaultText { get; set; }

    public override string Text
    {
        get
        {
            return string.IsNullOrEmpty(base.Text)
                ? (this.DefaultText ?? string.Empty)
                : base.Text;
        }
    }
}

Когда я использовал этот код, моя гиперссылка отображалась на странице, но вместо <a>Default Text</a> я получил <a text="Default Text"></a>.

Ответы [ 3 ]

1 голос
/ 01 июня 2011

Вы полностью переопределяете поведение свойства Text, хотя оно может не отображаться так, как оно было задумано. Что вы действительно хотите сделать, так это переопределить метод Render:

protected override void Render(HtmlTextWriter writer)
{
    if (string.IsNullOrEmpty(base.Text))
    {
        Text = (this.DefaultText ?? string.Empty);
    }
    base.Render(writer);
}

Это обрезание перед тем, как элемент управления отображает текст. Это происходит так поздно в жизненном цикле элемента управления, что даже не будет сохранено во ViewState, чтобы сохранить вздутие живота!

1 голос
/ 01 июня 2011

Согласно отражателю, вы пропустили атрибут и не переопределили установщик

public class MyHyperLink : HyperLink
{
    public string DefaultText { get; set; }

    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public override string Text
    {
        get
        {
            return string.IsNullOrEmpty(base.Text) ? this.DefaultText : base.Text;
        }
        set
        {
            base.Text = value;
        }
    }
}
1 голос
/ 01 июня 2011

вам не нужно переопределять свойство Text. Вам просто нужно добавить новое строковое свойство и украсить его атрибутом PersistenceMode, как показано ниже:

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string MyTextProperty{
    get
    {
       return ViewState["Text"] != null ? (string)ViewState["Text"] : string.Empty;
    }
    set
    {
        this.ViewState["Text"] = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...