2008-10-03 5 views
1

Мне очень сложно найти стандартный шаблон/лучшую практику, которая касается рендеринга дочерних элементов управления в составном составе на основе значения свойства.Asp.Net 2 Свойства пользовательских элементов управления сервером

Вот базовый сценарий. У меня есть Composite Control, который имеет два дочерних элемента управления, текстовое поле и выпадающее меню. Допустим, есть свойство, которое переключает дочерний объект.

так:

myComposite.ShowDropdown = true; 

Если это правда, это показывает выпадающий список, в противном случае она показывает текстовое поле.

Значение свойства должно быть сохранено через обратную передачу, а правильный элемент управления должен отображаться на основе значения обратной передачи.

Какие-нибудь хорошие примеры?

ответ

3

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

public virtual bool ShowDropdown 
{ 
    get 
    { 
     object o = ViewState["ShowDropdown"]; 
     if (o != null) 
     return (bool)o; 
     return false; // Default value 
    } 
    set 
    { 
     bool oldValue = ShowDropdown; 
     if (value != oldValue) 
     { 
     ViewState["ShowDropdown"] = value; 
     } 
    } 
} 

Возможно где-то в вашем методе рендера вам показать или скрыть DropDown управление, основанное на стоимости недвижимости:

dropDown.Visible = ShowDropDown; 
textBox.Visible = !ShowDropDown; 

Composite Web Control Example Смотрите также.

0

Я думаю, что-то вроде:

public bool ShowDropDown 
{ 
    get{ return (bool)ViewState["ShowDropDown"]; } 
    set{ ViewState["ShowDropDown"]; } 
} 


private void Page_Load(object sender, EventArgs e) 
{ 
    DropDaownControl.Visible = ShowDropDown; 
    TextBoxControl.Visible = !ShowDropDown; 
} 
/* some more code */ 
+0

Если это свойство не задано вызывающим, вы получите исключение NullReferenceException в методе get. – 2008-10-03 23:53:20