簡體   English   中英

如何將自定義構建的webpart添加到列表定義項目中的自定義視圖aspx頁面

[英]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>&lt;div&gt;Create and view Project documents:&lt;/div&gt;
&lt;br/&gt;</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()方法訪問。 您認為我們可以使用任何其他選項來實現它。 我嘗試了以下步驟:

  1. 復制OOB“ViewPage.aspx”並將其放在與“CustomViewPage.aspx”相同的文件夾中

  2. 創建自定義Web部件,使用您的自定義方法顯示視圖的項目。

  3. 創建一個功能以配置“CustomViewpage.aspx”以及您的自定義Web部件。

  4. 創建自定義列表定義。 在所有視圖的定義的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM