Member 10377426 Ответов: 1

Я получаю исключение не могу создать объект типа label из строкового представления когда я устанавливаю целевую метку пользовательского элемента управления в ASP.NET


Что мне нужно сделать, чтобы создать пользовательский элемент управления, производный от textbox, который устанавливает выходное сообщение об ошибке проверки базы данных на выходную метку так,

я получил исключение не могу создать объект типа ' System.Web.UI.WebControls.Label 'из его строкового представления 'Label1'

я пробую эти оба кода :

public Label LabelMain
       {
            get; set;
       }

        public Label c
        {
            get { return FindControl(c.ID) as Label; }
            set { c = value as Label; }
        }



первый показывает, что исключение,
второй убивает компилятор, и visual studio взрывается !!! ДА ПОЧЕМУ ЖЕ !!!

Что мне делать ?
я очень
 поиск google, stackoverflow,.... и ничего не исправить мою проблему;

Что я уже пробовал:

я пытаюсь привести возвращенную метку в качестве метки, но Visual Studio взорвалась.

CSC.exe взорвался тоже

[no name]

Кроме Того Я Могу Нацелиться На Многие Элементы Управления В Качестве Выходного Результата Моего Пользовательского Элемента Управления Например,
Фокусировка На Следующем Наборе Разработчиков Элементов Управления

[no name]

пожалуйста, я хочу, чтобы это исправить быстро ??? парни ???

1 Ответов

Рейтинг:
5

Richard Deeming

Цитата:
public Label c
{
    ...
    set { c = value as Label; }
}

Классический пример бесконечной рекурсии. :)

Вы установили c к чему-то, что призывает сеттера к c, который вызывает сеттера для c, который вызывает сеттера для c, который зовет...

В конце концов, вы получите не "взрыв", а StackOverflowException. Который почти всегда вызвано бесконечной рекурсией.

Вам нужно будет разделить это на два свойства: одно из них типа Label, который может быть установлен из кода-за; и еще один типа string, который может быть установлен на идентификатор метки из разметки:
[TypeConverter(typeof(ControlIDConverter))]
[IDReferenceProperty]
public string LabelMainID
{
    get { return (string)ViewState["LabelMainID"] ?? string.Empty; }
    set { ViewState["LabelMainID"] = value; }
}

public Label LabelMain
{
    get
    {
        string id = LabelMainID;
        if (string.IsNullOrEmpty(id)) return null;
        return NamingContainer.FindControl(id) as Label;
    }
    set
    {
        if (value == null)
        {
            LabelMainID = null;
        }
        else
        {
            LabelMainID = value.ID;
        }
    }
}


[no name]

#готово, я все понял.