3

如何按特定获取所有节点Document Type

例如,我想在所有节点后面使用Document Type: s3Article. 我怎样才能做到这一点?


新信息:

    IEnumerable<Node> nodes = uQuery.GetNodesByType("s3Article").Where(x => x.NiceUrl.Contains("en"));

    lvArticles.DataSource = nodes;
    lvArticles.DataBind();

这是我的代码。我必须使用Where(x => x.NiceUrl.Contains("en")),因为我有 2 种语言版本 - 没有Where收到来自所有目录的 doctype 节点s3Article,但我只想从一种语言版本中获取。

问题在这里:

<a href='<%# umbraco.library.NiceUrl(Tools.NumericTools.tryParseInt( Eval("id"))) %>'><%# Eval("title")%></a>
<%# Tools.TextTools.makeIMGHTML("../.."+ Eval("img").ToString(),"180") %>
<%# umbraco.library.StripHtml(Limit(Eval("Article"), 1000))%>
<%# Eval("author")%>

System.Web.HttpException:DataBinding:“umbraco.presentation.nodeFactory.Node”不包含名为“title”的属性。

标题、img、文章、作者也会出现同样的问题。只有 ID 工作得很好。如何解决?

4

2 回答 2

6

您可以使用uQuery GetNodesByType(string or int)方法:

IEnumerable<Node> nodes = uQuery.GetNodesByType("s3Article");

或者,您可以使用扩展方法获取所有后代节点,然后按类型查询它们,如以下答案所示:

Umbraco 4.6+ - 如何在 C# 中按 doctype 获取所有节点?


您可以使用它来将数据绑定到用户控件中的控件,如下所示:

lvArticles.DataSource = nodes.Select(n => new {
    ID: n.Id,
    Title: n.GetProperty("title").Value,
    Author: n.GetProperty("author").Value,
    Article: n.GetProperty("article").Value,
    Image: n.GetProperty("img").Value,
});
lvArticles.DataBind();

只有您需要在 select 语句中剥离 html、将图像 id 转换为 url 等...

于 2013-04-11T17:02:30.487 回答
2

正如 Shannon Deminick 提到的,uQuery 有点过时了。ExamManager 将是最快的执行时间。https://our.umbraco.org/forum/developers/api-questions/45777-uQuery-vs-Examine-vs-IPublishedContent-for-Querying

我还发现它是使用 ExamineManager 的搜索构建器的最简单和最易读的方法。非常灵活,并且由于 U 团队使用的 Fluent Builder 模式而具有非常易读的额外好处。

这将搜索所有节点,因此如果您需要在特定分支中,您可以使用 .ParentId(1234) 等。

var query = ExamineManager.Instance.CreateSearchCriteria()
                          .NodeTypeAlias("yourDocumentType")
                          .Compile();

IEnumerable<IPublishedContent> myNodes = Umbraco.TypedSearch(query);

我更喜欢类型化节点,但如果你更喜欢动态节点,你也可以只使用“Search()”而不是“TypedSearch()”。

另一个示例包括特定属性值“myPropValue”==“ABC”,

var query = ExamineManager.Instance.CreateSearchCriteria()
                    .NodeTypeAlias("yourDocumentType")
                    .Or() //Other predicate .And, .Not etc. 
                    .Field("myPropValue", "ABC")
                    .Compile();

参考 - https://our.umbraco.org/documentation/reference/querying/umbracohelper/

于 2016-07-20T18:54:08.503 回答