我正在使用SiteDefinition创建一些页面,标记看起来像这样:
<File Url="Page.aspx" Name="$Resources:SiteDefinitions,PageName;" Type="GhostableInLibrary">
<Property Name="Title" Value="$Resources:SiteDefinitions,PageTitle;" />
<Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/Somepage.aspx"></Property>
<AllUsersWebPart WebPartZoneID="WebPartZone1" WebPartOrder="1">
-- webpart data here
</AllUsersWebPart>
</File>
页面按预期创建,但有点错误。例如,如果我单击编辑页面,然后单击发布(不实际编辑任何内容),我将收到此错误:
“此页面已被修改,因为您打开它。您必须再次打开该页面。”
我会得到这个错误。每次我尝试编辑动作。
如果我使用相同的页面布局手动创建页面,一切都按预期工作,并且不会显示此错误。
有人知道可能出现什么问题吗?
答案 0 :(得分:0)
我也使用上面的方法创建一个页面,我在代码中发现的东西只是我曾经在PageLayout中有一个标题
<Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/Somepage.aspx, Your title"></Property>
答案 1 :(得分:0)
我认为你使用PublishingLayoutPage是正确的。我在搜索由其他内容引起的此错误时遇到了this article today。虽然文章中的人没有从PublishingLayoutPage继承并且未指定PublishingPageLayout属性,但它描述了您的同一问题。当他们修复它时,它起作用了。
虽然我在他们的文章中注意到他们正在指定ContentType属性,但这并没有直接帮助您。你试过指定这个吗?正如您可以看到完整的代码,您是否从文章中看到了任何其他差异或评论中的其他信息?
答案 2 :(得分:0)
好的,我(有点)现在就开始工作了。
制作ONET.xml的人已经在元素的Url属性中引用了页面布局。
就像我之前在评论中写的那样,我尝试使页面布局继承自TemplateRedirectionPage。相反,我现在创建了一个空的default.aspx文件,该文件继承自TemplateRedirectionPage并将我的所有页面布局文件更改回派生自PublishingLayoutPage。然后我在每个元素下面添加了PublishingPageLayout元素。
有趣或奇怪的是,对Url属性中的页面布局进行了反射,而根本没有使用PublishingPageLayout元素实际上是有效的。它没有意义,因为它会产生这些错误的页面,但SharePoint实际上接受它并吐出ONET.xml中定义的所有页面
现在唯一的事情是,由于我进行了上述更改,当我基于页面布局手动创建新页面时,每个默认webpart(如AllUsersWebPart所定义)都会实例化5次。真的不知道这种行为来自哪里,但至少它没有那么严重到无法编辑/发布我的页面:)