2011-01-26 104 views
0

我正在開發一個自定義控件,需要將下拉列表顯示爲複合控件。ASP.Net自定義控件

從休息Web服務中填充下拉列表。我面臨的問題是,下拉列表只有DataTextField和DataValueField,但我需要一種在控件中存儲更多值的方法,即我需要訪問所選項目的其他一些屬性。

這樣做的最好方法是什麼?

這裏是我到目前爲止的代碼:

[ValidationProperty("SelectedValue")] 
    public class SelectSurveyControl : Panel 
    { 
     private DropDownList ddlSurveys; 

     public string SelectedSurveyId 
     { 
      get 
      { 
       return SelectedValue; 
      } 
     } 

     public string SelectedSurveyJavascriptEmbedCode 
     { 
      get 
      { 
       return this.ddlSurveys.SelectedItem.Attributes[""]; 
      } 
     } 

     public string SelectedValue 
     { 
      get 
      { 
       return ddlSurveys.SelectedValue; 
      } 
      set 
      { 
       if (ddlSurveys == null) 
       { 
        ddlSurveys = new DropDownList(); 
       } 

       ddlSurveys.SelectedValue = value; 
      } 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnInit(e); 

      if (ddlSurveys == null) 
      { 
       ddlSurveys = new DropDownList(); 
      } 

      IList<Survey> surveys = GetSurveys(); 

      this.ddlSurveys.DataSource = surveys; 
      this.ddlSurveys.DataTextField = "title"; 
      this.ddlSurveys.DataValueField = "id"; 

      this.ddlSurveys.DataBind(); 

      ddlSurveys.SelectedValue = this.SelectedValue; 
      ddlSurveys.CssClass = "umbEditorTextFieldMultiple charlimit"; 
      ddlSurveys.Attributes.Add("SurveyId", SelectedSurveyId); 
      ddlSurveys.Attributes.Add("JavascriptEmbedingCode", SelectedSurveyId); 

      this.Controls.Add(ddlSurveys);    
     } 

     public IList<Survey> GetSurveys() 
     { 
      ... 
     } 
} 
+0

http://stackoverflow.com/questions/2001521/html-dropdown-selection-value可能會給你這個問題的出發點。 – DaveParsons 2011-01-26 11:40:50

回答

1

嘗試使用字符串連接/拆分來存儲和檢索的各個值,那麼你不必很自定義您的下拉列表。

例如:

文字:有些題目

值:1 |測試試驗| 2010/2/12

這將讓你想你保存儘可能多的價值,所以只要你選擇一個合適的角色加入和分裂。我通常使用酒吧,就像我上面的例子。

邊注:我在看你選定的值集處理程序,它需要一些調整。你不應該檢查一個空的下拉列表,而應該在每個get和set之前調用EnsureChildControls()來代替。確保你重寫CreateChildControls()方法並在那裏創建你的控件。

1

你可以使用一個隱藏字段和重複通這樣返回的調查的副本:

foreach(Survey s in Surveys){ 
string val = s.id + ":" + s.<property1> + ":" + s.<property2>; 
hiddenField.Value += val +","; 
} 

當你需要從隱藏字段讀,你用String.Split的值分成數組使用','作爲分隔符,在每個數組中,使用':'再次分割。

在第一次拆分Array1 [0]誰是調查ID和Array1 [n!= 0]將是ID = Array1 [0]的Survey的屬性。 Array [n!= 0]然後將被分割成Array2。

我會建議使用空字符串或其他東西來處理空的屬性值,否則,如果指定StringSplitOptions.RemoveEmptyEntries,則結果可能不相等。

Agricfowl