0

我想知道是否有可能根据用户的选择跳过所有问题并终止对话。

例如,我有下一个代码:

public ContentClassification ContentClassification {get;set;}

public StatusOfContent StatusContent {get; set;}

public Accessibility ExternalSharing {get; set;}

根据“ContentClassification”的选择,跳过其他问题。

提前致谢。

4

1 回答 1

1

根据“ContentClassification”的选择,跳过其他问题。

你可以使用FieldReflector来实现你自己的IField,例如:

public enum ContentClassification
{
    Confidential_Restricted = 1,
    Confidential_Secret = 2,
    Public = 3,
    Strictly_Confidential = 4,
    help = 5
};

public enum StatusContent
{
    Status1,
    Status2
}

public enum Accessibility
{
    Accessibility1,
    Accessibility2
}

[Serializable]
public class Classification
{
    public ContentClassification? Choice { get; set; }
    public StatusContent? StatusOfContent { get; set; }
    public Accessibility? Accessibility { get; set; }

    public static bool Confirmation = true;

    public static IForm<Classification> BuildForm()
    {
        return new FormBuilder<Classification>()
            .Message("You want to")
            .Field(new FieldReflector<Classification>(nameof(Choice))
                   .SetNext((value, state) =>
                   {
                       var selection = (ContentClassification)value;
                       if (selection == ContentClassification.help)
                       {
                           Confirmation = false;
                           state.Accessibility = null;
                           state.StatusOfContent = null;
                       }
                       else
                       {
                           Confirmation = true;
                       }
                       return new NextStep();
                   }))
              .Field(new FieldReflector<Classification>(nameof(StatusOfContent))
                   .SetActive(state => Confirmation))
              .Field(new FieldReflector<Classification>(nameof(Accessibility))
                   .SetActive(state => Confirmation))
            .Build();
    }
}

并且在RootDialog

[Serializable]
public class RootDialog : IDialog<object>
{
    public Task StartAsync(IDialogContext context)
    {
        var form = new FormDialog<Classification>(new Classification(), Classification.BuildForm, FormOptions.PromptInStart, null);
        context.Call(form, this.GetResultAsync);

        return Task.CompletedTask;
    }

    private async Task GetResultAsync(IDialogContext context, IAwaitable<Classification> result)
    {
        var state = await result;
        //TODO:
    }
}

使用此代码,当用户Help在第一个对话框中选择时Choice,它将跳过以下两个问题,您将获得result,等。GetResultAsyncChoice = HelpStatusOfContent = nullAccessibility = null

于 2017-11-27T03:22:39.703 回答