[英]How to add a custom built webpart to a custom view aspx page in list definition project
我已經開發了一個列表定義項目,並創建了一個自定義視圖aspx頁面作為列表的默認視圖。 我現在想添加一個自定義webpart以顯示在自定義視圖aspx頁面中。 有關如何做到的任何想法?
在SharePoint 2010上,您可以在List定義的Schema.xml內的同一視圖定義中添加自定義Webpart或SharePoint WebPart(我不是在討論List實例)。
雖然沒有MSDN直接解釋,如果您查看View Schema,您看不到“<WebParts>”定義,您實際上可以執行以下操作:
<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上)。
您可以使用功能接收器並在功能激活期間管理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();
好吧,我想訪問列表定義視圖頁面,我認為不會使用上面的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視圖= 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。 我錯過了什么或者本文中缺少某些東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.