2017-05-02 34 views
1

试图利用PromptDialog.Choice当我得到一个无效的类型异常。 这里是我的对话我的代码:PromptDialog.Choice - 无效的异常类型

public async Task StartAsync(IDialogContext context) { 
    await context.PostAsync(ConversationHelper.CreateReschedulePromptMessage()); 
    context.Wait(MessageReceivedAsync); 
} 

public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) { 
    var message = await result; 
    var Options = new[] { "Location", "Date and Time", "Both" }; 

    if (message.Text.ToUpper().CompareTo("PICKUP") == 0) { 
    _rescheduleType = "pickup"; 
    string prompt = string.Format("Is the {0} location incorrect, is the date and time incorrect, or both?", _rescheduleType); 
    PromptDialog.Choice(context, OnResumeFromRescheduleChoice, Options, prompt, promptStyle: PromptStyle.Auto, descriptions: Options); 
    } 
    else if (message.Text.ToUpper().CompareTo("DROP") == 0) { 
    _rescheduleType = "drop-off"; 
    string prompt = string.Format("Is the {0} location incorrect, is the date and time incorrect, or both?", _rescheduleType); 
    PromptDialog.Choice(context, OnResumeFromRescheduleChoice, Options, prompt, promptStyle: PromptStyle.Auto, descriptions: Options); 
    } 
    else { 
    await context.PostAsync(ConversationHelper.CreateGenericRescheduleMessage(SUPPORTNUMBER)); 
    } 

    context.Done<object>(null); 
} 

private async Task OnResumeFromRescheduleChoice(IDialogContext context, IAwaitable<string> result) { 
    var choice = await result; 
} 

的OnResumeFromRescheduleChoice方法烧制,但结果却显示失败,因为ResumeAfter委托期待字符串类型,但接收对象。 PromptDialog的这种不正确的用法?用户也没有被提示选择。我正在使用Bot.Builder版本3.5.5。

+0

是对context.Done (空)调用发生的太早了? –

回答

1

移动else子句中的context.Done<object>(null);电话。烧成Prompt后,您不能打电话context.Done

+1

这是我的问题。谢谢。 –

相关问题