如何只输出 select 的文本而不是 2sxc razor 模板中的值?
How can I output just the text of a select instead of the value in 2sxc razor templates?
在 2sxc App 中,在我的内容类型中,我有一个加拿大省份的下拉列表,其中包含一个名称和一个缩写值。它看起来像这样:
英国人Columbia:bc
Alberta:ab
太子 Island:pei
等等
我希望能够在我的 c# razor 模板中使用文本标签和 select 值。当我使用 @Content.Province 时,它只输出值,所以如果我使用 select 不列颠哥伦比亚省,它会将其输出为“bc”。如何输出 selection 的标签,使其输出“British Columbia”?
我相信那些标签只是在编辑中 ui 并且不能被令牌拉取。
请阅读这里:
虽然可能有一种方法可以从实体或值获取标签,但还有另一种选择,但需要一些步骤才能到达那里。
首先,您必须标准化您的值以匹配 ISO 和 DNN 已经 存储的内容。在任何 DNN 数据库中查看 dbo.Lists table。
SELECT * FROM [dbo].[Lists] WHERE ListName = 'Region'
例如,您必须将爱德华王子岛的下拉值设置为“PE”
然后您可以使用 DNN 的 ListController 获取加拿大的区域,将此代码放入视图中,它会生成 DNN 内置的 name/value 对:
@using DotNetNuke.Common.Lists
@{
IEnumerable<ListEntryInfo> listEntryInfoCol = (new ListController()).GetListEntryInfoItems("Region", "Country.CA");
}
<pre>
Value = Text:
@foreach( var region in listEntryInfoCol ) {
<span>@region.Value = @region.Text</span>
}
</pre>
您可能想要提取一个字典或数组,然后您可以使用该值作为键来获取您需要的文本。
所以我在代码中说你会从 DNN 列表加载你的 CA 区域,然后当你想为 PE 输出“爱德华王子岛”时,@dictRegions["PE"]。
我最终使用了这种方法:
@{
var provinceMappings = new Dictionary<string, string>();
provinceMappings.Add("ab", "Alberta");
provinceMappings.Add("bc", "British Columbia");
provinceMappings.Add("mb", "Manitoba");
provinceMappings.Add("nb", "New Brunswick");
provinceMappings.Add("nl", "Newfoundland & Labrador");
provinceMappings.Add("nwt", "Northwest Territories");
provinceMappings.Add("ns", "Nova Scotia");
provinceMappings.Add("nu", "Nunavut");
provinceMappings.Add("on", "Ontario");
provinceMappings.Add("pei", "Prince Edward Island");
provinceMappings.Add("qc", "Quebec");
provinceMappings.Add("sk", "Saskwatchewan");
provinceMappings.Add("yt", "Yukon Territories");
}
@provinceMappings[p]
你看到我上面的回答了吗?您正在复制 DNN 中已有的内容。我想我还没说到重点...
所以看看这个。我不确定如何降低 Linq/Lambda 部分的复杂性,但从技术上讲它只是一行代码。 ;)
也许您或其他人可以简化它。但由于 DNN 已经内置了所有数据,下面是将其输入 provinceMappings 字典的方法:
@using DotNetNuke.Common.Lists
@using System.Linq
@{
Dictionary<string, string> provinceMappings = (new ListController())
.GetListEntryInfoDictionary("Region", "Country.CA")
.Select(x => new { x.Value.Value, x.Value.Text } )
.ToDictionary(x => x.Value, x => x.Text );
<pre>
That's it, done, now you can use it like you want:
provinceMappings["PE"] = @provinceMappings["PE"]
Key: Value
@foreach( var region in provinceMappings ) {
<span>@region.Key: @region.Value</span>
}
Count: @provinceMappings.Count()
Type: @provinceMappings.GetType()
JSON: @DotNetNuke.Common.Utilities.JsonExtensionsWeb.ToJson(provinceMappings)
</pre>
}
将其放在一个视图中,您可以看到 provinceMappings 具有您需要从 DNN 填充的内容,您无需构建。如果您不想将其放入视图中,则输出如下所示,
一个小更新:我创建了一个教程示例,展示了如何在 C# 中访问已配置的下拉属性。这并不能完全回答这里的问题,但可能对寻找这样的东西的人有用:
在 2sxc App 中,在我的内容类型中,我有一个加拿大省份的下拉列表,其中包含一个名称和一个缩写值。它看起来像这样:
英国人Columbia:bc Alberta:ab 太子 Island:pei
等等
我希望能够在我的 c# razor 模板中使用文本标签和 select 值。当我使用 @Content.Province 时,它只输出值,所以如果我使用 select 不列颠哥伦比亚省,它会将其输出为“bc”。如何输出 selection 的标签,使其输出“British Columbia”?
我相信那些标签只是在编辑中 ui 并且不能被令牌拉取。
请阅读这里:
虽然可能有一种方法可以从实体或值获取标签,但还有另一种选择,但需要一些步骤才能到达那里。
首先,您必须标准化您的值以匹配 ISO 和 DNN 已经 存储的内容。在任何 DNN 数据库中查看 dbo.Lists table。
SELECT * FROM [dbo].[Lists] WHERE ListName = 'Region'
例如,您必须将爱德华王子岛的下拉值设置为“PE”
然后您可以使用 DNN 的 ListController 获取加拿大的区域,将此代码放入视图中,它会生成 DNN 内置的 name/value 对:
@using DotNetNuke.Common.Lists
@{
IEnumerable<ListEntryInfo> listEntryInfoCol = (new ListController()).GetListEntryInfoItems("Region", "Country.CA");
}
<pre>
Value = Text:
@foreach( var region in listEntryInfoCol ) {
<span>@region.Value = @region.Text</span>
}
</pre>
您可能想要提取一个字典或数组,然后您可以使用该值作为键来获取您需要的文本。
所以我在代码中说你会从 DNN 列表加载你的 CA 区域,然后当你想为 PE 输出“爱德华王子岛”时,@dictRegions["PE"]。
我最终使用了这种方法:
@{
var provinceMappings = new Dictionary<string, string>();
provinceMappings.Add("ab", "Alberta");
provinceMappings.Add("bc", "British Columbia");
provinceMappings.Add("mb", "Manitoba");
provinceMappings.Add("nb", "New Brunswick");
provinceMappings.Add("nl", "Newfoundland & Labrador");
provinceMappings.Add("nwt", "Northwest Territories");
provinceMappings.Add("ns", "Nova Scotia");
provinceMappings.Add("nu", "Nunavut");
provinceMappings.Add("on", "Ontario");
provinceMappings.Add("pei", "Prince Edward Island");
provinceMappings.Add("qc", "Quebec");
provinceMappings.Add("sk", "Saskwatchewan");
provinceMappings.Add("yt", "Yukon Territories");
}
@provinceMappings[p]
你看到我上面的回答了吗?您正在复制 DNN 中已有的内容。我想我还没说到重点...
所以看看这个。我不确定如何降低 Linq/Lambda 部分的复杂性,但从技术上讲它只是一行代码。 ;)
也许您或其他人可以简化它。但由于 DNN 已经内置了所有数据,下面是将其输入 provinceMappings 字典的方法:
@using DotNetNuke.Common.Lists
@using System.Linq
@{
Dictionary<string, string> provinceMappings = (new ListController())
.GetListEntryInfoDictionary("Region", "Country.CA")
.Select(x => new { x.Value.Value, x.Value.Text } )
.ToDictionary(x => x.Value, x => x.Text );
<pre>
That's it, done, now you can use it like you want:
provinceMappings["PE"] = @provinceMappings["PE"]
Key: Value
@foreach( var region in provinceMappings ) {
<span>@region.Key: @region.Value</span>
}
Count: @provinceMappings.Count()
Type: @provinceMappings.GetType()
JSON: @DotNetNuke.Common.Utilities.JsonExtensionsWeb.ToJson(provinceMappings)
</pre>
}
将其放在一个视图中,您可以看到 provinceMappings 具有您需要从 DNN 填充的内容,您无需构建。如果您不想将其放入视图中,则输出如下所示,
一个小更新:我创建了一个教程示例,展示了如何在 C# 中访问已配置的下拉属性。这并不能完全回答这里的问题,但可能对寻找这样的东西的人有用: