我开发了一个列表定义项目,并创建了一个自定义视图aspx页面作为列表的默认视图。我现在想添加一个自定义webpart以显示在自定义视图aspx页面中。有关如何做到的任何想法?
答案 0 :(得分:2)
您可以使用功能接收器并在功能激活期间管理Web部件的添加。这里有一些存根可以帮助您入门。
在功能激活的方法中,调用代码类似于以下内容:
// Add web parts to the .aspx page that was provisioned
SPFile page = site.GetFile(<<page url>>);
Hashtable hashWebPartsOnPage = new Hashtable();
using (SPLimitedWebPartManager mgr = page.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
try
{
// First, let's clear the existing web parts off of the form
foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in mgr.WebParts)
{
hashWebPartsOnPage.Add(webPart.ID, webPart);
}
foreach (string webPartName in hashWebPartsOnPage.Keys)
{
System.Web.UI.WebControls.WebParts.WebPart webPart = hashWebPartsOnPage[webPartName] as System.Web.UI.WebControls.WebParts.WebPart;
mgr.DeleteWebPart(webPart);
}
// Add Part to the proper Zone
MyWebPart myWebPart = new MyWebPart();
//set web part properties
mgr.AddWebPart(myWebPart, "FullPage", 1);
}
finally
{
mgr.Web.Dispose();
}
}
page.Update();
答案 1 :(得分:2)
在SharePoint 2010上,您可以在列表定义的 Schema.xml 内的同一视图定义中添加自定义Webpart或SharePoint WebPart(我不是在谈论列表实例)。
虽然MSDN没有直接解释,但如果查看View Schema,则无法看到'&lt; WebParts&gt;'定义,你实际上可以做这样的事情:
<View BaseViewID="7" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:CILSS_defaultView" DefaultView="TRUE" MobileView="FALSE" MobileDefaultView="FALSE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" Url="CI_Projects.aspx">
<Toolbar Type="Standard" />
<XslLink Default="TRUE">main_cilss.xsl</XslLink>
<RowLimit Paged="TRUE">30</RowLimit>
<ViewFields>
<FieldRef Name="Attachments"></FieldRef>
<FieldRef Name="LinkTitle"></FieldRef>
<FieldRef Name="CILSS_ProjectDescription"></FieldRef>
</ViewFields>
<Query>
<OrderBy>
<FieldRef Name="LinkTitle" Ascending="TRUE"></FieldRef>
</OrderBy>
</Query>
<ParameterBindings>
<ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
<ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
</ParameterBindings>
<WebParts>
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2">
<![CDATA[<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Title>Default Home Webpart</Title>
<FrameType>None</FrameType>
<Description>Use for formatted text, tables, and images.</Description>
<IsIncluded>true</IsIncluded>
<ZoneID>Left</ZoneID>
<PartOrder>0</PartOrder>
<FrameState>Normal</FrameState>
<Height />
<Width />
<AllowRemove>true</AllowRemove>
<AllowZoneChange>true</AllowZoneChange>
<AllowMinimize>true</AllowMinimize>
<AllowConnect>true</AllowConnect>
<AllowEdit>true</AllowEdit>
<AllowHide>true</AllowHide>
<IsVisible>true</IsVisible>
<DetailLink />
<HelpLink />
<HelpMode>Modeless</HelpMode>
<Dir>Default</Dir>
<PartImageSmall />
<MissingAssembly>Cannot import this Web Part.</MissingAssembly>
<PartImageLarge>/_layouts/images/mscontl.gif</PartImageLarge>
<IsIncludedFilter />
<Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
<TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>
<ContentLink xmlns="" />
<Content xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor">
<Value><div>Create and view Project documents:</div>
<br/></Value></Content>
<PartStorage xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
</WebPart>]]>
</AllUsersWebPart>
</WebParts>
</View>
此视图定义在列表视图中包含名为“CI_Projects.aspx”的内容编辑器Webpart 请记住分配WebPartZoneId并分配与List定义中包含的默认视图不同的BaseViewID。
将使用此列表定义在您创建的每个列表上配置webpart。 (显然只在你定义的命名view.aspx上)。
答案 2 :(得分:1)
我想访问列表定义视图页面,我认为无法使用上述site.GetFile()方法访问该页面。您认为我们可以使用任何其他选项来实现它。我尝试了以下步骤:
复制OOB“ViewPage.aspx”并将其放在与“CustomViewPage.aspx”相同的文件夹中
创建自定义Web部件,使用您的自定义方法显示视图的项目。
创建一个功能以配置“CustomViewpage.aspx”以及自定义Web部件。
创建自定义列表定义。在所有视图的定义的schema.xml文件中,提到“SetupPath”以引用“CustomViewPage.aspx”。在此步骤中,列表定义中提到的所有视图将使用“CustomViewPage.aspx”来创建视图页面,以及创建列表后创建的所有视图将使用“customViewPage.aspx”作为基础用于创建视图页面的页面。
第1步:
只需复制OOB“ViewPage.aspx”并将其放在C:\ Program Files \ Common Files \ Microsoft Shared \ web服务器extensions \ 12 \ TEMPLATE \ Pages文件夹中,作为“CustomViewPage.aspx”
第2步:
创建自定义Web部件,使用您的自定义方法显示视图的项目。基本上使用GetViewfromUrl(“Lists //”)方法获取视图,然后检索Web部件中的项目。自定义Web部件的代码段如下所示:
SPList list = SPContext.Current.List;
String strViewName =
SPView view = SPContext.Current.Web.GetViewFromUrl(“Lists / list /”+ strViewName);
SPListItemCollection listItems = list.GetItems(view);
。
获取列表项后,然后执行显示项目的自定义方法。
构建Web部件DLL并将其放在GAC中。
第3步:
创建一个功能以配置“CustomViewPage.aspx”以及自定义Web部件。通过激活此功能,“Customviewpage.aspx”将嵌入您的自定义Web部件。元素清单文件内容如下所示:
<File Url="Pages/CustomViewPage.aspx" Type="Ghostable">
<AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1">
<![CDATA[
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
<Assembly>CustomWebpartforView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e3483ddc8b0d437a</Assembly>
<TypeName> CustomWebpartforView.MyCustomview</TypeName>
<FrameType>None</FrameType>
<IsVisible>true</IsVisible>
<Title>Custom Web part for View</Title>
</WebPart>
]]>
</AllUsersWebPart>
</File>
此步骤为我提供了源文件路径的错误,我通过在文件标记中提供Path属性来修改
第4步:
现在,基本自定义视图页面随Web部件一起提供。现在,如何将自定义视图页面与列表定义集成。创建自定义列表定义,并为架构中定义的所有视图提及“SetupPath”以使用“CustomViewPage.aspx”。现在,自定义视图页面将用作列表定义中定义的所有视图的基本视图页面,以及稍后创建的视图也将使用“CustomViewpage.aspx”作为基页。用于声明schema.xml内部视图的示例代码段如下:
安装并激活自定义列表定义的功能。
现在通过所有这些步骤,当您基于此自定义列表定义创建列表时,创建的所有视图将使用“CustomViewPage.aspx”来创建视图页面,并且将呈现您的自定义Web部件而不是OOB dataformwebpart。在创建List(通过UI,通过对象模型)之后创建的视图也将使用“CustomViewpage.aspx”作为基页来创建视图页面。
由于某些原因,我仍然无法使用自定义webpart查看CustomViewPage.aspx。我错过了某些内容,或者本文中缺少某些内容。