private IEnumerable <SiteMapIndexNodeModel> CreateIndexNode(ISiteMapConfigurationModel configuration, string baseUrl, int pageCount) { for (int page = 1; page <= pageCount; page++) { string url = configuration.CreateSitemapUrl(page); SiteMapIndexNodeModel indexNode = new SiteMapIndexNodeModel { Url = url }; ValidateUrl(baseUrl, indexNode); yield return(indexNode); } }
public ActionResult CreateSiteMaps(HttpContextBase httpContext, IEnumerable <SiteMapNodeModel> siteMapNodes, ISiteMapConfigurationModel siteMapConfigurationModel) { if (httpContext == null) { throw new ArgumentNullException("httpContext"); } if (siteMapConfigurationModel == null) { throw new ArgumentNullException("configuration"); } string baseUrl = baseUrlProvider.GetBaseUrl(httpContext); List <SiteMapNodeModel> nodeList = siteMapNodes != null?siteMapNodes.ToList() : new List <SiteMapNodeModel>(); IEnumerable <XmlSerializerNamespaceModel> namespaces = xmlNamespaceProvider.GetNamespaces(nodeList); if (siteMapConfigurationModel.Size >= nodeList.Count) { return(CreateSitemapInternal(baseUrl, nodeList, namespaces)); } if (siteMapConfigurationModel.CurrentPage.HasValue && siteMapConfigurationModel.CurrentPage.Value > 0) { int skipCount = (siteMapConfigurationModel.CurrentPage.Value - 1) * siteMapConfigurationModel.Size; List <SiteMapNodeModel> pageNodes = nodeList.Skip(skipCount).Take(siteMapConfigurationModel.Size).ToList(); return(CreateSitemapInternal(baseUrl, pageNodes, namespaces)); } int pageCount = (int)Math.Ceiling((double)nodeList.Count / siteMapConfigurationModel.Size); var indexNodes = CreateIndexNode(siteMapConfigurationModel, baseUrl, pageCount); return(actionResultFactory.CreateXmlResult(new SiteMapIndexModel(indexNodes))); }