我有一個很難找到一個標準模式/最佳做法,處理基於屬性值複合內部的子控件。Asp.Net 2自定義服務器控件屬性
這是一個基本的場景。我有一個複合控件有兩個子控件,一個文本框和一個下拉菜單。可以說有一個屬性可以切換要渲染的孩子。
這樣:
myComposite.ShowDropdown = true;
如果爲true,則顯示一個下拉,否則它顯示的文本。
屬性值應跨回發保存,並應根據回發值顯示正確的控件。
那裏有很好的例子嗎?
我有一個很難找到一個標準模式/最佳做法,處理基於屬性值複合內部的子控件。Asp.Net 2自定義服務器控件屬性
這是一個基本的場景。我有一個複合控件有兩個子控件,一個文本框和一個下拉菜單。可以說有一個屬性可以切換要渲染的孩子。
這樣:
myComposite.ShowDropdown = true;
如果爲true,則顯示一個下拉,否則它顯示的文本。
屬性值應跨回發保存,並應根據回發值顯示正確的控件。
那裏有很好的例子嗎?
您使用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;
}
}
}
在Render方法可能介於顯示或隱藏基於屬性值下拉控件:
dropDown.Visible = ShowDropDown;
textBox.Visible = !ShowDropDown;
我想喜歡的事:
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 */
如果此屬性未由調用者設置,您將在get方法中得到NullReferenceException。 – 2008-10-03 23:53:20