获取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 包含 多张 卡片的旋转木马
请问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
类型的 CardActionValue 作为 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 包含 多张 卡片的旋转木马