ASP.NET - Поменять местами текстовые поля для меток, когда Enabled = False - PullRequest
1 голос
/ 26 июня 2009

Настройка: веб-форма с большим количеством элементов управления TextBox.

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

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

Ответы [ 3 ]

3 голосов
/ 26 июня 2009

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

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

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

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

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));
        }
    }
}
2 голосов
/ 26 июня 2009

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

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

2 голосов
/ 26 июня 2009

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

...