2011-01-26 14 views
0

私は複合コントロールとしてドロップダウンリストを表示する必要があるカスタムコントロールを開発しています。ASP.Netカスタムコントロール

ドロップダウンリストには、Rest 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

+0

どうすれば.NETコードで達成できますか? – Burt

+0

追加のデータをクライアントで利用できるようにする必要がありますか、それともサーバー上で処理するために追加のデータが必要ですか? – DaveParsons

答えて

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を使用します'、'をセパレータとして使用し、各配列で ':'を使用して再度分割します。

調査IDとArray1 [n!= 0]の最初の分割Array1 [0]は、id = Array1 [0]の調査のプロパティになります。 Array [n!= 0]はArray2に分割されます。

空の文字列などで空のプロパティ値を処理することをお勧めします。そうしないと、特にStringSplitOptions.RemoveEmptyEntriesを指定した場合、長さが等しくならないことがあります。

Agricfowl

関連する問題