ListViewWebPart自定义事件列表模板的问题

时间:2010-06-14 21:40:39

标签: sharepoint sharepoint-2010

我已将C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ TEMPLATE \ FEATURES \ EventsList \ Events \ schema.xml复制到自定义列表模板功能中。我有另一个创建列表实例的功能:

<ListInstance
    FeatureId="58c1f9c9-eadb-41dd-a358-e04b2f2e30c0"
    TemplateType="100322"
    Title="$Resources:core,calendarList"
    Url="$Resources:core,lists_Folder;/$Resources:core,calendar_Folder"
    OnQuickLaunch="TRUE">
</ListInstance>

然后在页面上放置ListViewWebPart:

<View List="$Resources:core,lists_Folder;/$Resources:core,calendar_Folder" BaseViewID="0" WebPartZoneID="TopRightRow" WebPartOrder="3" />

我激活这些功能并转到该网站。 webpart说:目前没有即将举办的活动。要添加新活动,请单击“添加新活动”。单击“添加新事件”,输入信息,然后单击“保存”。页面刷新,没有即将发生的事件消息消失,但没有显示任何项目!如果我去日历,列表项就在那里。是什么给了什么?

我更改列表实例定义,以便它使用开箱即用的模板:

<ListInstance
    FeatureId="00bfea71-ec85-4903-972d-ebe475780106"
    TemplateType="106
    Title="$Resources:core,calendarList"
    Url="$Resources:core,lists_Folder;/$Resources:core,calendar_Folder"
    OnQuickLaunch="TRUE">
</ListInstance>

当我重建网站,激活功能并重复“添加新”步骤时,该项目现在在页面刷新后正确显示在webpart中。

我已从自定义列表模板中撤消了所有更改。它现在与OOTB架构相同。为什么我的自定义列表模板不起作用,但是OOTB列表模板呢?

1 个答案:

答案 0 :(得分:1)

我知道为什么OOTB模板有效,但我能够修复我的自定义模板。

首先,从schema.xml中的BaseViewID =“0”视图中删除XslLink行:

<XslLink>main.xsl</XslLink>

向下滚动到工具栏/ IfHasRights部分。改变案例4:

<Case Value="4"><HTML><![CDATA[<div class="tb"><img src="/_layouts/images/caladd.gif" alt="" />&#160;<a class="ms-addnew" id="idHomePageNewEvent" href="]]></HTML>
  <URL Cmd="New" /><HTML><![CDATA[" onclick="javascript:NewItem(']]></HTML>
  <ScriptQuote NotAddingQuote="TRUE">
    <URL Cmd="New" />
  </ScriptQuote><HTML><![CDATA[', true);javascript:return false;" target="_self">]]></HTML><HTML>$Resources:core,AddNewEvent;</HTML><HTML><![CDATA[</a></div>]]></HTML>
</Case>

为:

<Case Value="4"><HTML><![CDATA[<div class="tb"><img src="/_layouts/images/caladd.gif" alt="" />&#160;<a class="ms-addnew" id="idHomePageNewEvent" href="]]></HTML>
  <URL Cmd="New" /><HTML><![CDATA[" onclick="javascript:NewItem2(event, ']]></HTML>
  <ScriptQuote NotAddingQuote="TRUE">
    <URL Cmd="New" />
  </ScriptQuote><HTML><![CDATA[');javascript:return false;" target="_self">]]></HTML><HTML>$Resources:core,AddNewEvent;</HTML><HTML><![CDATA[</a></div>]]></HTML>
</Case>

这将启用新的SharePoint 2010弹出窗口NewForm.aspx行为。

接下来,将webpart的配置更改为:

<View List="$Resources:core,lists_Folder;/$Resources:core,calendar_Folder" BaseViewID="0" WebPartZoneID="TopRightRow" WebPartOrder="3">
    <![CDATA[
        <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
            <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
            <TypeName>Microsoft.SharePoint.WebPartPages.ListViewWebPart</TypeName>
            <Title>Calendar</Title>                       
        </WebPart>
    ]]>
</View>

这与删除XslLink行一起强制webpart呈现为ListViewWebPart而不是XsltListViewWebPart

现在两个wepart之间的渲染是不同的,所以作为最后一步,使用以下样式,以便ListViewWebPart的添加新链接看起来像XsltListViewWebPart的添加新链接:

div.tb {
border-top:1px solid #EBEBEB;
margin:3px 0 16px;
padding:9px 7px 3px 10px;
}