使用MVC为Sitefinity小部件创建导出控件时遇到问题

时间:2014-10-20 13:58:37

标签: c# asp.net asp.net-mvc sitefinity

我正在为基于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的新手,我正在努力尽快学习我正在进行的项目。

2 个答案:

答案 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();