我正在为基于MVC的Sitefinity小部件的Controller类工作,该小部件旨在获取所有页面内容并将其导出为JSON格式供以后使用。问题是,当我尝试添加到pageArray变量时,我在Visual Studio中遇到错误:最佳重载方法匹配' System.Collections.Generic.List.Add(System.Web.UI.Page )'有一些无效的论点。我不确定为什么会收到此错误。
以下是ExportController类中出现的函数:
public ActionResult Index()
{
List<Page> pageArray = new List<Page>();
//// Use Sitefinity API get all pages
IQueryable<PageNode> pageNodes = App.WorkWith().Pages().Where(pN => (pN.Page != null && pN.Page.Status == ContentLifecycleStatus.Live)).Get();
foreach (var page in pageNodes)
pageArray.Add(page);//this is where I get the error message
return Json(pageArray, JsonRequestBehavior.AllowGet);
}
我承认我是ASP.NET MVC和Sitefinity API的新手,我正在努力尽快学习我正在进行的项目。
答案 0 :(得分:2)
您需要将pageArray从System.Web.UI.Page更改为Telerik.Sitefinity.Pages.Model.PageNode
取决于您使用的Sitefinity版本。从7.0版开始,之前位于PageData中的元数据信息现在位于PageNode中。
public ActionResult Index()
{
List<PageNode> pageArray = new List<PageNode>();
//// Use Sitefinity API get all pages
IQueryable<PageNode> pageNodes = App.WorkWith().Pages().Where(pN => (pN.Page != null && pN.Page.Status == ContentLifecycleStatus.Live)).Get();
foreach (var page in pageNodes)
pageArray.Add(page);
return Json(pageArray, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:0)
您可以使用Fluent API,也可以使用下面的Native API
var pageManager = PageManager.GetManager();
pageManager.Provider.SuppressSecurityChecks = true;
var rootPages = pageManager.GetPageNodes()
.AsEnumerable()
.Where(p => !p.IsBackend && p.Parent != null && p.Parent.Title.ToLower() == "pages" && p.ShowInNavigation && p.ApprovalWorkflowState == "Published")
.OrderBy(p => p.Ordinal)
.ToList();