创建MOSS发布页面时出现错误(这是一个完全干净的MOSS安装,还没有内置的站点)。我正在使用我在很多博客上找到的代码,例如:
var pubWeb = PublishingWeb.GetPublishingWeb(Site.RootWeb);
SPContentTypeId ctId = new SPContentTypeId(contentTypeId);
var layouts = pubWeb.GetAvailablePageLayouts(ctId);
var layout = layouts[0];
var url = pageTitle.EndsWith(".aspx") ? pageTitle : pageTitle + ".aspx";
var newPage = pubWeb.GetPublishingPages().Add(url, layout);
但是当我进行pubWeb.GetPublishingPages().Add
方法调用时,我收到以下错误:
FormatException - 索引(从零开始)必须大于或等于零且小于参数列表的大小。
我检查了以下内容:
我似乎无法通过Google找到任何有用的内容,也无法在Reflector中找到任何有用的内容。
答案 0 :(得分:2)
我发现问题是什么,我使用的ContentType已损坏。由于另一个问题,我正在部署ContentTypes(see this question)我正在以编程方式创建ContentType,但是使用CAML部署PageLayout。这导致AssociatedContentType不正确,因此当我使用它创建页面时,MOSS无法确定要使用的内容类型和翻倒。
答案 1 :(得分:1)
检查您使用的网络是否为发布网站。引用MSDN关于GetPublishingWeb的文章: -
在使用此方法之前,请检查 IsPublishingWeb方法确认 支持发布行为 这个SPWeb类的实例。如果 发布不受支持 SPWeb,然后是方法和属性 可以使用PublishingWeb包装器 表现出乎意料。
// Get the PublishingWeb wrapper for the SPWeb that was passed in.
PublishingWeb publishingWeb = null;
if (PublishingWeb.IsPublishingWeb(web))
{
publishingWeb = PublishingWeb.GetPublishingWeb(web);
}
else
{
throw new System.ArgumentException("The SPWeb must be a PublishingWeb", "web");
}
答案 2 :(得分:0)
尝试将网站添加到服务器场,然后使用this code from social msdn:
public void FillPublishingWebWithPages
(string publishingSiteCollection, int pagesToCreate)
{
try
{
using ( SPSite site = new SPSite( publishingSiteCollection ) )
{
using ( SPWeb web = site.OpenWeb() )
{
PublishingSite pubSite = new PublishingSite( site );
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb( web );
SPContentTypeId articleContentTypeID =
new SPContentTypeId( "0x010100C568DB52D9D0A14D9B2FDCC96666E9F"+
"2007948130EC3DB064584E219954237AF3900242457EFB8B242478" );
PageLayout[] layouts = pubWeb.GetAvailablePageLayouts( articleContentTypeID );
PageLayout articlePageLayout = layouts[ 1 ];
// create a temp name...
string pageName = DateTime.Now.ToString( "yyyyMMdd-HHmmss" );
// create the specified number of pages
for ( int i = 0; i < pagesToCreate; i++ )
{
PublishingPage newPage =
pubWeb.GetPublishingPages().Add( string.Format( "{0}_Gend_Page_{1}.aspx", pageName, i ), articlePageLayout );
newPage.Title = "Hello";
newPage.ListItem[ "PublishingContactName" ] = "valuetest";
newPage.Update();
newPage.ListItem.File.CheckIn( "created" );
newPage.ListItem.File.Publish( "created" );
newPage.ListItem.File.Approve( "created" );
pubWeb.Update();
}
web.Update();
}
}
}
catch ( Exception ex )
{
throw new Exception(
"Error in Page CREATION ----FillPublishingWebWithPages----", ex );
}
return;
}
呼叫示例:
FillPublishingWebWithPages( http://server:12345/sites/test/subsite1/subsite2/Pages/, 5 );