获取HeroCard的Value并展示在Carousel中

Get Value of HeroCard and display in Carousel

请问HeroCard选中后如何获取值?

以轮播格式显示英雄卡片?

这里有我的源代码和截图(在模拟器中显示)。

        JObject jObj = JObject.Parse(content);
        var stopNames = jObj.SelectToken("legs[2].stops.stopName");
        var stopIds = jObj.SelectToken("legs[2].stops.stopId");
        JArray stops = (JArray)jObj.SelectToken("legs[2].stops");


        var attachments = new List<Attachment>();
        foreach (JToken stop in stops)
        {
            stopIds = (string)stop.SelectToken("stopId");
            stopNames = (string)stop.SelectToken("stopName");

            var reply = MessageFactory.Carousel(new Attachment[]
           {
                new HeroCard(
                    //title: stopIds.ToString()+ stopNames.ToString(),
                    buttons: new CardAction[]
                    {
                        new CardAction(ActionTypes.ImBack, title: stopNames.ToString() , value: stopIds.ToString())
                    }

                    ).ToAttachment()
           }
           );
            await turnContext.SendActivityAsync(reply);


        }

屏幕截图

要以轮播格式显示英雄卡,只需将多张英雄卡添加到轮播即可。

例如:

var reply = MessageFactory.Carousel(new Attachment[]
        {
            new HeroCard(
                //title: stopIds.ToString()+ stopNames.ToString(),
                buttons: new CardAction[]
                {
                    new CardAction(ActionTypes.ImBack, title: "title1" , value: "value1")
                }

                ).ToAttachment(),
              new HeroCard(
                //title: stopIds.ToString()+ stopNames.ToString(),
                buttons: new CardAction[]
                {
                    new CardAction(ActionTypes.ImBack, title: "title2", value:"value2")
                }

                ).ToAttachment(),
                new HeroCard(
                //title: stopIds.ToString()+ stopNames.ToString(),
                buttons: new CardAction[]
                {
                    new CardAction(ActionTypes.ImBack, title: "title3", value:"value3")
                }

                ).ToAttachment()
        }
        );
        await turnContext.SendActivityAsync(reply);

在您的情况下,因为您使用的是 ActionTypes.ImBack

类型的 CardAction

Value 作为 text 发送,您可以通过执行以下操作获得它:

var value = turnContext.Activity.Text

更新

关于您对如何从 foreach 循环发送轮播的评论。

尝试以下操作:

        JObject jObj = JObject.Parse(content);
        var stopNames = jObj.SelectToken("legs[2].stops.stopName");
        var stopIds = jObj.SelectToken("legs[2].stops.stopId");
        JArray stops = (JArray)jObj.SelectToken("legs[2].stops");

        var attachments = new List<Attachment>();
        foreach (JToken stop in stops)
        {
            stopIds = (string)stop.SelectToken("stopId");
            stopNames = (string)stop.SelectToken("stopName");


            var herocard = new HeroCard(
                 //title: stopIds.ToString()+ stopNames.ToString(),
                 buttons: new CardAction[]
                 {
                    new CardAction(ActionTypes.ImBack, title: stopNames.ToString() , value: stopIds.ToString())
                 }

                 ).ToAttachment();

            attachments.Add(herocard);


        }
        var reply = MessageFactory.Carousel(attachments);

        await turnContext.SendActivityAsync(reply);

你要做的是先做一个附件列表,然后从foreach循环内动态添加进去,Carousel应该在foreach循环外,因为你需要发送ONE 包含 多张 卡片的旋转木马