ASP.NET — замена текстовых полей на метки, если Enabled = False

Установка: веб-форма с множеством элементов управления TextBox.

Когда я устанавливаю для любого из свойств Enabled элемента управления TextBox значение False, я хотел бы «заменить» это TextBox на метку во время выполнения. Идея здесь в том, что если он в любом случае доступен только для чтения, не отображайте его в элементе управления, предназначенном для редактирования.

Я думаю, что это должно быть довольно просто и многоразово, но как лучше всего это сделать?


person Brandon    schedule 25.06.2009    source источник


Ответы (3)


Не уверен, что это лучший способ, я бы сделал собственный серверный элемент управления текстовым полем,

затем переопределите метод рендеринга, проверьте, доступен ли он только для чтения,

если он доступен только для чтения, тогда визуализируйте теги span, как это делает элемент управления меткой.

если нет, то пусть базовый (текстовое поле) рендеринг вступит во владение...

public class SpecialTextbox : TextBox
{
    public override void RenderControl(HtmlTextWriter writer)
    {
        if (!this.ReadOnly)
        {
            base.RenderControl(writer);
        }
        else
        {
            writer.Write(string.Format("<span id=\"{0}\" class=\"{1}\">{2}</span>", 
                            this.ClientID, 
                            this.CssClass, 
                            this.Text));
        }
    }
}
person BigBlondeViking    schedule 25.06.2009
comment
вы также можете поменять «промежуток» на «метку», если хотите - person BigBlondeViking; 26.06.2009

Одним из возможных решений было бы создание нового элемента управления, расширяющего TextBox. Затем ваш специализированный элемент управления переопределит (части) код рендеринга, в результате чего элемент управления будет отображаться аналогично метке, когда ReadOnly = true.

person Jørn Schou-Rode    schedule 25.06.2009

Другим способом было бы изучить использование адаптера управления. По сути, вы сможете делать то же самое, что рекомендует BigBlondeViking, но вы можете продолжать использовать в своем коде обычный элемент управления asp:textbox. Это будет намного проще для вас и других разработчиков.

Об управлении адаптеры

person smercer    schedule 25.06.2009