我的项目中有4个对话框,第一个是
RootDialog
有一些枚举。 这是我的根对话框,所以如果用户选择第一个选项,那么我想将他发送到
的createContact
我在下面添加的对话框,如果用户选择
GetContact
或
的SendMail
然后我会将他发送到相应的Dialog,但我无法在完成或选择第一个Dialog时调用另一个表单对话框。
[Serializable]
public enum RootOptions
{
CreateContact = 1, GetContact = 2, SendMail
};
[Serializable]
public class RootForm
{
public RootOptions? Option;
public static IForm<RootForm> BuildForm()
{
return new FormBuilder<RootForm>()
.Message("Welcome to TEST BOT!")
.OnCompletion(async (context, rootoption) =>
{
switch(rootoption.Option.Value.ToString()) "")
{
case "CreateContact":
//How to call Contact Dialog
break;
case "GetContact":
//Call Get Contact Dialog
break;
case "SendMail":
//Call Send Mail Dialog
break;
}
})
.Build();
}
}
创建联系人对话框
[Serializable]
public class ContactForm
{
[Prompt("What is the name? {||}")]
public string Name;
[Prompt("What is the Mobile No? {||}")]
public string Mobile;
[Prompt("What is the Email? {||}")]
public string Email;
public static IForm<ContactForm> BuildForm()
{
return new FormBuilder<ContactForm>()
.Message("Let's create a contact")
.OnCompletion(async (context, profileForm) =>
{
await context.PostAsync("Your contact has been created.");
})
.Build();
}
}
发送邮件对话框
[Serializable]
public class MailForm
{
[Prompt("What is the Email Id? {||}")]
public string Email;
[Prompt("What is the Subject? {||}")]
public string subject;
[Prompt("What is the Message? {||}")]
public string Message;
public static IForm<MailForm> BuildForm()
{
return new FormBuilder<MailForm>()
.Message("Let's Send a Mail")
.OnCompletion(async (context, mailForm) =>
{
await context.PostAsync("Mail Sent.");
})
.Build();
}
}
答案 0 :(得分:1)
要调用对话框,您需要按this post中的说明使用context.Call
。但是,我不完全确定这是否适用于表单的OnCompletion
事件。
如果它不起作用,我的建议是将RootForm
封装到IDialog<object>
对话框中,并使用该对话框作为控制器Conversation.SendAsync
的起点。 / p>
答案 1 :(得分:0)
您可以使用下面的代码行来调用多个对话框:
await Task.Run(() => context.Call(new OptionDialog(),
this.OptionDialogResumeAfter)).ConfigureAwait(false);