我有一個相當大的應用程序,它有幾百個DDL和Yes/No ListItems。爲了節省一些時間,我創建了一個擴展標準DDL的自定義控件。擴展一個DropDownList控件
這一切似乎工作正常,但我在代碼中分配SelectedValue屬性時出現一些問題,其中所選值似乎對控件沒有影響。我想知道是否應該在Init或PagePreLoad中添加我的項目?我應該在添加列表項之前還是之後調用base.OnInit?這主要是有效的,但不是100%。 (V3.5)
public class YesNoDropDownList : DropDownList
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!Page.IsPostBack)
{
base.Items.Add(new ListItem("Yes", "YES"));
base.Items.Add(new ListItem("No", "NO"));
}
}
}
我認爲這個問題是,如果我加載初始化時listItems,即建立之前視圖狀態和listItems中丟失的回傳。如果我在OnLoad中加載它們,那是在應用了SelectedValue之後,並且如果我設置了SelectedValue,則選擇將丟失。我的解決方案是連接OnInit覆蓋中的Page InitComplete事件。這工作,但我不知道這是最好的解決方案。
因此,無論是Page_InitComplete詳細如下或OnInit,但我必須每次加載項目。思考?
protected override void OnInit(EventArgs e)
{
this.Page.InitComplete += new EventHandler(Page_InitComplete);
base.OnInit(e);
}
private void Page_InitComplete(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
base.Items.Add(new ListItem("Yes", "YES"));
base.Items.Add(new ListItem("No", "NO"));
}
}
你怎麼不只是使用複選框的經過驗證的方法,而不是下拉列表? – soniiic 2010-04-18 00:03:36
您可以將代碼粘貼到指定SelectedValue的位置嗎? – 2010-04-18 00:14:14
我很想使用複選框,但這是對現有應用程序的重寫,他們使用DDL。有一些位置存在第三個未選定狀態(空)。 – andleer 2010-04-18 00:25:12