C# Kentico页面类型转换迭代显示
自定义页面类型将多选表单控件属性值存储为管道分隔字符串,如“foo | bar” 在页面类型ASCX转换中,我能够使用以下方法成功检索和显示foo | bar属性值: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
<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>