Kentico页面类型转换迭代显示

时间:2017-11-01 16:45:41

标签: c# webforms kentico

自定义页面类型将多选表单控件属性值存储为管道分隔字符串,例如“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[]数组值?我应该使用不同类型的转换吗?

感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:4)

实现这一目标的最简单方法是使用&#34; Text / XML&#34;转换类型而不是ASCX,并使用K#Kentico Macro语法循环分隔字符串。

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

然后你应该能够做与你的第一个例子类似的事情。来自文档的Kentico的foreach示例有点简单:

{% z = ""; foreach (x in "hello") {z += x.toupper()}; z %}(返回&#34; HELLO&#34;)

但您应该能够修改它以满足您的需求。

以下是使用嵌套循环和一些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>";
}%}

答案 1 :(得分:0)

虽然不建议使用以下方法,但它确实派了很多次。写下您的转换如下

<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以供参考。