2017-11-01 13 views
0

データベースに格納されているオブジェクトオプションのリストを入力するプロンプトダイアログを作成します。ただし、オプションの名前ではなくオブジェクトのタイプのみが表示されていました。誰も私にデータベースからオプションをロードし、それをPromptDialogにバインドする最良の方法を提案できますか?ここで私が試したものです。ここでListオブジェクトでのダイアログボックスの選択肢の表示

private void ShowOptions(IDialogContext context) 
{ 
    List<Option> ListOptions = Option.CreateListOption(); 
    PromptDialog.Choice(context, this.OnOptionSelected, ListOptions, "Are you looking for a flight or a hotel?", "Not a valid option", 3); 
} 
private async Task OnOptionSelected(IDialogContext context, IAwaitable<Option> result) 
{ 
    try 
    { 

     Option optionSelected = await result; 

     switch (optionSelected.Text) 
     { 
      case "A": 
       context.Call(new RootDialog(), this.ResumeAfterChoose); 
       break; 
      default: { context.Wait(MessageReceiveAsync); break; } 
     } 
    } 
    catch (TooManyAttemptsException ex) 
    { 
     await context.PostAsync($"Ooops! Too many attemps :(. But don't worry, I'm handling that exception and you can try again!"); 

     context.Wait(this.MessageReceiveAsync); 
    } 
} 

[Serializable] 

public class Option 
{ 
    public int ID { get; set; } 
    public string Text { get; set; } 
    public Option() 
    { 
     ID = 0; 
     Text = ""; 
    } 
    public static List<Option> CreateListOption() 
    { 
     List<Option> list = new List<Option>(); 
     Option A = new Option(); 
     A.ID = 1; 
     A.Text = "A"; 
     Option B = new Option(); 
     B.ID = 2; 
     B.Text = "B"; 
     list.Add(A); 
     list.Add(B); 
     return list; 
    } 
} 

されており、ここで私が得ている結果だ:

enter image description here

+0

オプションで一覧を使用しています.Textオプション? –

+0

テキスト結果を使用してOnOptionSelectedメソッドでIDを検索できますか? –

答えて

1

Choice静的メソッドもDescriptionsパラメータが含まれています。あなたは次のことを試みることができる:

  • をオプションについては、説明のために
  • をIDS List<int>含むあなたのオプションを送信する、オプションのテキストを送信します。
+0

ありがとうエゼキエル...それは私のために働いたが...私はオブジェクトを送信する必要があります...私たちはオブジェクトを送信し、IDとテキストを含むオブジェクトを受け取ることができます...私はオブジェクトでより多くのプロパティを送信する必要があるので、 ...またはそれを達成するための他の方法があります。 –

+0

IDで、前に述べたように、実際のオプションを調べることができます。もう1つのオプションは、OptionクラスのToString()をオーバーライドすることです。あなたがそれをするなら、選択時に何が起こるかを覚えていません。 –

0

エセキエルで述べたように、あなたは次のようにDescriptionsパラメータを提供することができますにあなたのOnOptionSelectedを変更すると

PromptDialog.Choice(context, this.OnOptionSelected, 
      ListOptions.Select(l=>l.ID).ToArray(), 
      "Are you looking for a flight or a hotel?", "Not a valid option", 3, 
     descriptions: ListOptions.Select(l=>l.Text).ToArray()); 

private async Task OnOptionSelected(IDialogContext context, IAwaitable<int> result) 
    { 
     try 
     { 

      int optionSelected = await result; 
      var foundOption = Option.CreateListOption().First(o => o.ID == optionSelected); 
//do more with foundOption 
      switch (optionSelected) 
      { 
       case 1: 
        context.Call(new RootDialog(), this.ResumeAfterChoose); 
        break; 
       default: { context.Wait(MessageReceivedAsync); break; } 
      } 
     } 
     catch (TooManyAttemptsException ex) 
     { 
      await context.PostAsync($"Ooops! Too many attemps :(. But don't worry, I'm handling that exception and you can try again!"); 

      context.Wait(this.MessageReceivedAsync); 
     } 
    } 

enter image description here

関連する問題