【问题标题】:How can I output just the text of a select instead of the value in 2sxc razor templates?如何仅输出选择的文本而不是 2sxc 剃须刀模板中的值?
【发布时间】:2020-09-15 17:01:28
【问题描述】:

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

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

等等

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

【问题讨论】:

    标签: razor dotnetnuke 2sxc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我相信那些标签只存在于edit ui中,无法通过token拉取。

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

      【讨论】:

        【解决方案3】:

        虽然可能有一种方法可以从实体或值中获取标签,但也可以使用另一种方法,尽管它需要几个步骤才能到达那里。

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

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

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

        然后你可以使用 DNN 的 ListController 来获取加拿大的地区,把这段代码放在一个视图中,它会在 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>
        

        您可能想要提取一个字典或数组,然后您可以使用该值作为键来获取您需要的文本。

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

        【讨论】:

          【解决方案4】:

          你看到我上面的回答了吗?您正在复制 DNN 中已经存在的内容。我想我从来没有说到点子上……

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

          也许您或其他人可以简化它。但由于 DNN 已经内置了所有数据,因此您可以通过以下方式将其输入到您的省映射字典中:

          @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 填充的东西,您不必构建。如果您不想将其放在视图中,则输出如下所示,

          【讨论】:

          • 有道理,感谢您的回答!我确实看到了您的答案,但是在我已经实施了我的解决方案之后。另外,我不确定这是否有任何区别,但我的省和地区列表不是加拿大省和地区的完整列表(因为我正在为其构建的组织只有一个省和地区的选择列表所以我已经在 drodpown 中手动写出了列表)。
          【解决方案5】:

          我最终使用了这种方法:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多