我在使用umbraco默认数据类型“相关链接”时遇到问题。我的问题是我想迭代属性的子/选项。我已经看过使用xml和xslt的例子,但我想知道是否有可能在用户控件中使用纯c#。
像这样(但是一个有效的变体)
Node node = new Node(Node.getCurrentNodeId());
var linklist = node.GetProperty("link");
if (node.GetProperty("link") != null)
{
foreach (var item in linklist)
{
//get each item here
}
}
谢谢!
(我还发布了问题here)
答案 0 :(得分:8)
我认为你应该可以做这样的事情(Razor)
@using umbraco.MacroEngines
@inherits DynamicNodeContext
@{
var root = Model.AncestorOrSelf();
var links = root.FooterLinks.link;
<ul class="nav nav-pills">
<li><span>@Dictionary.RelatedLinks</span></li>
@foreach (var item in links)
{
var url = item.type == "internal" ? Library.NodeById(item.link).Url : item.link;
var rel = item.type == "external" ? " rel=\"external\"" : string.Empty;
var title = item.title;
<li><a href="@url"@Html.Raw(rel)>@title</a></li>
}
</ul>
}
答案 1 :(得分:1)
您知道XML序列化/反序列化吗?
我会研究这个领域,通过将XML反序列化为C#对象(如阵列列表),可以更轻松地读取XML数据。
http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization
希望这是有用的。
答案 2 :(得分:0)
好的,所以这就是我做的工作。我使用了Jorge的答案,但改变了一点,非常少。借助于查看umbraco.config,我就是这样做的
@using umbraco.MacroEngines
@using umbraco.NodeFactory;
@{
var root = Model;
var links = root.link;
if (links == null)
{
return;
}
foreach(var item in links)
{
DynamicNode linkNode = Model.NodeById(@item.link);
Response.Redirect(@linkNode.Url);
break;
}
}
我想我可以在用户控件中使用一些Derek的asnwer。我的意思是我可以像往常一样选择属性和使用的XmlTextReader来读取所选属性的xml部分。谢谢你的呐喊!