Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Kentico页面类型转换迭代显示_C#_Webforms_Kentico - Fatal编程技术网

C# Kentico页面类型转换迭代显示

C# Kentico页面类型转换迭代显示,c#,webforms,kentico,C#,Webforms,Kentico,自定义页面类型将多选表单控件属性值存储为管道分隔字符串,如“foo | bar” 在页面类型ASCX转换中,我能够使用以下方法成功检索和显示foo | bar属性值: <div><%# Eval("Foobar") %></div> 尝试将类型设置为string或var会导致系统范围的异常并阻止站点加载: <ul> <% foreach (string thing in Eval<string>("Foobar").Spli

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

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

<div><%# Eval("Foobar") %></div>
尝试将类型设置为
string
var
会导致系统范围的异常并阻止站点加载:

<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循环并以字符串[]topics为目标会导致错误“CS0103:名称“topics”在当前上下文中不存在”:

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


谢谢你能提供的任何帮助

实现这一点的最简单方法是使用“Text/XML”转换类型而不是ASCX,并使用K#Kentico宏语法循环使用分隔字符串

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

{%z=”“;foreach(hello中的x){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>";
}%}
{%
订单=电子商务Context.CurrentCustomer.AllOrders;
如果(orders.Count>0){
结果=“
    ”; foreach(订单中的订单){ foreach(order.OrderItems中的项目) {result+=“
  • ”+item.OrderItemSKUName+”
  • “} }; 返回结果+“
”; }%}
虽然不推荐使用下面的方法,但它确实在很多时候派上了用场。将您的转换写在下面

<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>
公共字符串生成器(字符串值) { string liList=string.Empty; 字符串[]foobarSplit=“foobar”.Split(“|”); foreach(foobarSplit中的字符串项) liList+=“
  • ”+项目+“
  • ”; 回归百合; }
    上面的代码可以帮助解决您的问题,但肯定有更有效的方法。
    您也可以查看以供参考。

    我同意@probrandono,否则,如果您不想使用txt转换,则需要创建一个自定义转换方法来执行逻辑和循环()。
    {%
    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>";
    }%}
    
    <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>