【问题标题】:Kentico Page Type Transformation Iteration DisplayKentico 页面类型转换迭代显示
【发布时间】:2017-11-28 21:02:43
【问题描述】:

自定义页面类型将多选表单控件属性值存储为管道分隔字符串,例如 "foo|bar"

在页面类型 ASCX 转换中,我能够使用以下方法成功检索和显示 foo|bar 属性值:

<div><%# Eval("Foobar") %></div>

目标是在管道 | 字符上拆分此字符串值并输出每个值,但我无法使用页面类型转换 ASCX 语法来实现这一点。

尝试以下操作会给我错误“错误 CS0230:foreach 语句中都需要类型和标识符”:

<ul>
  <% foreach (thing in Eval<string>("Foobar").Split('|')) { %>
    <li><%= thing %></li>
  <% } %>
</ul>

<ul class="list-unstyled">
  <% 
    things = Eval<string>("Foobar").Split('|');
    foreach (thing in things) { 
  %>
    <li><%= topic %></li>
  <% } %>
</ul>

尝试将类型设置为stringvar 会导致系统范围的异常并阻止网站加载:

<ul>
  <% foreach (string thing in Eval<string>("Foobar").Split('|')) { %>
    <li><%= thing %></li>
  <% } %>
</ul>

<ul>
  <% foreach (var thing in Eval<string>("Foobar").Split('|')) { %>
    <li><%= thing %></li>
  <% } %>
</ul>

<ul class="list-unstyled">
  <% 
    var things = Eval<string>("Foobar").Split('|');
    foreach (var thing in things) { 
  %>
    <li><%= thing %></li>
  <% } %>
</ul>

尝试 for 循环并以字符串 [] 主题为目标会导致错误“CS0103:当前上下文中不存在名称‘主题’”:

<ul class="list-unstyled">
  <% 
    things = Eval<string>("Foobar").Split('|');
    for(int i = 0; i < things.Length; i++) { 
  %>
    <li><%= things[i] %></li>
  <% } %>
</ul>

如何实现检索页面类型/文档的值,在管道字符上拆分,然后显示每个结果 string[] 数组值?我应该使用其他类型的转换吗?

感谢您提供的任何帮助!

【问题讨论】:

    标签: c# webforms kentico


    【解决方案1】:

    完成此操作的最简单方法是使用“文本/XML”转换类型而不是 ASCX,并使用 K# Kentico 宏语法循环通过您的分隔字符串。

    https://docs.kentico.com/k10/macro-expressions/macro-syntax

    然后您应该能够执行与您的第一个示例类似的操作。文档中 Kentico 的 foreach 示例更简单一些:

    {% z = ""; foreach (x in "hello") {z += x.toupper()}; z %}(返回“HELLO”)

    但您应该能够对其进行修改以满足您的需要。

    这是文档中使用嵌套循环和一些 HTML 的另一个示例:

    {%
    orders = ECommerceContext.CurrentCustomer.AllOrders;
    if (orders.Count > 0) {
        result = "<ul>";
        foreach (order in orders) {
            foreach (item in order.OrderItems)
                { result += "<li>" + item.OrderItemSKUName + "</li>" }
        };
        return result + "</ul>";
    }%}
    

    【讨论】:

    【解决方案2】:

    虽然不推荐使用以下方法,但它确实派上用场很多次。如下写下你的转换

    <ul>
      <%#GenerateLIs(Eval<string>("Foobar"))%>
    </ul>
    
    <script runat="server">
    public string GenerateLIs(string foobarValue)
    {
    
    string liList = string.Empty;
    string[] foobarSplit = "foobar".Split('|');
        foreach (string item in foobarSplit)
            liList += "<li>" + item + "</li>";
    
    return liList;
    }
    </script>
    

    上面的代码可以帮助解决您的问题,但肯定有更有效的方法可以解决。 也可以查看Kentico 9 form macros and different notification recipient based on dropdown value参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多