C# 如何使用MicrosoftBot框架在瀑布模型中实现下拉列表
我正在尝试使用对话在瀑布模型中实现下拉。第一步是提示用户输入姓名,然后要求用户输入年龄,然后输入用户需要旅行的城市。用户必须从下拉列表中选择城市,我想将信息转发到下一步。 我选择目的地的代码如下:C# 如何使用MicrosoftBot框架在瀑布模型中实现下拉列表,c#,C#,我正在尝试使用对话在瀑布模型中实现下拉。第一步是提示用户输入姓名,然后要求用户输入年龄,然后输入用户需要旅行的城市。用户必须从下拉列表中选择城市,我想将信息转发到下一步。 我选择目的地的代码如下: private async Task<DialogTurnResult> DestinationStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
private async Task<DialogTurnResult> DestinationStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var message = MessageFactory.Text("Enter your destination city");
var bookingDetails = (BookingDetails)stepContext.Options;
bookingDetails.age = (int)stepContext.Result;
var pmtOptions = new PromptOptions();
if (bookingDetails.Destination == null)
{
var card = new AdaptiveCard();
card.Body = new List<AdaptiveElement>();
var choices = new List<AdaptiveChoice>()
{
new AdaptiveChoice()
{
Title = "Pune",
Value = "Pune",
},
new AdaptiveChoice()
{
Title = "Mumbai",
Value = "Mumbai",
},
new AdaptiveChoice()
{
Title = "Hyderabad",
Value = "Hyderabad",
},
new AdaptiveChoice()
{
Title = "Bengaluru",
Value = "Bengaluru",
},
};
var choiceSet = new AdaptiveChoiceSetInput()
{
IsMultiSelect = false,
Choices = choices,
Style = AdaptiveChoiceInputStyle.Compact,
Value = "1",
Id = "Destination city",
};
card.Body.Add(choiceSet);
message.Attachments.Add(new Attachment() { Content = card, ContentType = "application/vnd.microsoft.card.adaptive" });
var createTaskAndElement = new List<AdaptiveElement>
{
new AdaptiveColumnSet
{
Id="btnCreate",
Columns=new List<AdaptiveColumn>
{
new AdaptiveColumn
{
Items=new List<AdaptiveElement>
{
new AdaptiveActionSet
{
Actions=new List<AdaptiveAction>
{
new AdaptiveSubmitAction
{
Title="Select"
}
}
}
}
}
}
}
};
card.Body.Add(new AdaptiveContainer
{
Id = "Create_Task_Container",
Style = AdaptiveContainerStyle.Default,
Spacing = AdaptiveSpacing.Default,
Bleed = false,
IsVisible = false,
VerticalContentAlignment = AdaptiveVerticalContentAlignment.Top,
Items = createTaskAndElement
});
card.Actions.Add(new AdaptiveSubmitAction() { Title = "Select" });
return await stepContext.PromptAsync(DlgChoice, new PromptOptions { Prompt = message },cancellationToken);
}
return await stepContext.NextAsync(bookingDetails.Destination, cancellationToken);
}
private async Task destinationstepsync(waterwallstepcontext stepContext,CancellationToken CancellationToken)
{
var message=MessageFactory.Text(“输入目的地城市”);
var bookingDetails=(bookingDetails)stepContext.Options;
bookingDetails.age=(int)stepContext.Result;
var pmtOptions=newprompoptions();
if(bookingDetails.Destination==null)
{
var卡=新的自适应卡();
card.Body=新列表();
var choices=新列表()
{
新的自适应选择()
{
Title=“浦那”,
Value=“Pune”,
},
新的自适应选择()
{
Title=“孟买”,
Value=“孟买”,
},
新的自适应选择()
{
Title=“海德拉巴”,
Value=“海德拉巴”,
},
新的自适应选择()
{
Title=“班加鲁”,
Value=“Bengaluru”,
},
};
var choiceSet=new AdaptiveChoiceSetInput()
{
IsMultiSelect=false,
选择=选择,
样式=自适应选择输入样式。紧凑,
Value=“1”,
Id=“目的地城市”,
};
卡片.正文.添加(选择集);
message.Attachments.Add(新附件(){Content=card,ContentType=“application/vnd.microsoft.card.adaptive”});
var createTaskAndElement=新列表
{
新的自适应列集
{
Id=“btnCreate”,
列=新列表
{
新的自适应列
{
项目=新列表
{
新的自适应动作集
{
操作=新列表
{
新的自适应submition
{
Title=“选择”
}
}
}
}
}
}
}
};
卡片.正文.添加(新的自适应容器
{
Id=“创建任务容器”,
Style=AdaptiveContainerStyle.Default,
间距=自适应间距。默认值,
出血=假,
IsVisible=false,
VerticalContentAlignment=自适应VerticalContentAlignment.Top,
Items=createTaskAndElement
});
添加(新的AdaptiveSubmitation(){Title=“Select”});
返回wait wait stepContext.PromptAsync(DlgChoice,newpromptoptions{Prompt=message},cancellationToken);
}
return wait stepContext.NextAsync(bookingDetails.Destination,cancellationToken);
}
当我尝试执行时,我得到的错误如下:
引发异常:System.Private.CoreLib.dll中的“Newtonsoft.Json.JsonReaderException”
'dotnet.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.22\System.Diagnostics.StackTrace.dll'。已跳过加载符号。模块已优化,并且调试器选项“仅我的代码”已启用。
'dotnet.exe'(CoreCLR:clrhost):加载了'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.22\System.Reflection.Metadata.dll'。已跳过加载符号。模块已优化,并且调试器选项“仅我的代码”已启用。
'dotnet.exe'(CoreCLR:clrhost):加载'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.22\System.IO.MemoryMappedFiles.dll'。已跳过加载符号。模块已优化,并且调试器选项“仅我的代码”已启用。
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:信息:执行的操作方法CoreBot4.Controllers.BotController.PostAsync(CoreBot4),返回3158.1642ms内的结果Microsoft.AspNetCore.Mvc.EmptyResult
请帮我解决这个问题。提前感谢在RunAsync方法中抛出错误:wait Dialog.RunAsync(turnContext,ConversationState.CreateProperty(“DialogState”),CancelationToken)@JohnG在内部似乎是tunContext在进行序列化。该对话框有一个包含城市列表的下拉列表,如果使用文本提示而不是od下拉列表,则不会引发错误。