如何仅输出选择文本而不是2sxc剃刀模板中的值?

问题描述

在2sxc App中,在我的内容类型中,我有一个加拿大省的下拉列表,其中有缩写的名称和值。看起来像这样:

不列颠哥伦比亚省:bc 艾伯塔省:ab 爱德华王子岛:裴

等等。

我希望能够在我的C#剃刀模板中同时使用文本标签和选择值。当我使用@ Content.Province时,它仅输出该值,因此,如果我选择不列颠哥伦比亚省,它将输出为“ bc”。如何输出所选内容标签,以便输出“不列颠哥伦比亚省”?

解决方法

一个小更新:我创建了一个教程示例,展示了如何在 C# 中访问配置的下拉属性。这并不能完全回答这里的问题,但可能对寻找类似内容的人有用:

https://2sxc.org/dnn-tutorials/en/razor/data910/page

,

我相信这些标签仅位于编辑ui中,不能被标记拉出。

请在此处阅读:2sxc: Dropdown list Get Label instead of value in razor template

,

虽然可能有一种方法可以从Entity或Value处获取Label,但还有另一种方法可用,尽管这需要一些步骤才能实现。

首先,您必须标准化值以匹配ISO和DNN 已经存储的内容。看看任何DNN数据库中的dbo.Lists表。

SELECT * FROM [dbo].[Lists] WHERE ListName = 'Region'

因此,例如,您必须将爱德华王子岛的下拉值设置为“ PE”

然后,您可以使用DNN的ListController来获取加拿大的区域,将此代码放入View中,它将生成DNN中内置的名称/值对:

@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>

您可能想改为提取一个Dictionary或数组,然后可以使用该值作为获取所需Text的键。

所以我说的是在代码中从DNN列表中加载CA区域,然后在要为PE输出@dictRegions [“ PE”]时输出“爱德华王子岛”。

,

您在上面看到了我的答案吗?您正在复制DNN中已有的内容。我想我从来没有讲到重点...

所以看看这个。我不确定如何减少Linq / Lambda部分的复杂性,但是从技术上讲,它只是一行代码。 ;)

也许您或其他人可以简化它。但是,由于DNN已经内置了所有数据,因此您可以将其输入省份Mappings词典:

@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中填充了您需要的东西,而无需构建。如果您不想将其放到视图中,则输出看起来像这样

enter image description here

,

我最终使用了这种方法:

 @{
    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 &amp; 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]