Sharepoint 如何在列表定义项目中将自定义生成的Web部件添加到自定义视图aspx页面

Sharepoint 如何在列表定义项目中将自定义生成的Web部件添加到自定义视图aspx页面,sharepoint,sharepoint-2007,Sharepoint,Sharepoint 2007,我开发了一个列表定义项目,并创建了一个自定义视图aspx页面作为列表的默认视图。我现在想添加一个自定义Web部件,以显示在自定义视图aspx页面中。有什么办法吗?您可以使用功能接收器并在功能激活期间管理web部件的添加。这里有一个小存根可以帮助你开始 在功能激活的方法调用代码中,类似于以下内容: // Add web parts to the .aspx page that was provisioned SPFile page = site.GetFile(&l

我开发了一个列表定义项目,并创建了一个自定义视图aspx页面作为列表的默认视图。我现在想添加一个自定义Web部件,以显示在自定义视图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();
//将web部件添加到已设置的.aspx页面
SPFile page=site.GetFile();
Hashtable hashWebPartsOnPage=新Hashtable();
使用(SPLimitedWebPartManager mgr=page.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
尝试
{
//首先,让我们从表单中清除现有web部件
foreach(管理器Web部件中的System.Web.UI.WebControl.WebParts.WebPart Web部件)
{
hashWebPartsOnPage.Add(webPart.ID,webPart);
}
foreach(hashWebPartsOnPage.Keys中的字符串webPartName)
{
System.Web.UI.WebControls.WebParts.WebPart WebPart=hashWebPartsOnPage[webPartName]作为System.Web.UI.WebControls.WebParts.WebPart;
经理删除Web部件(Web部件);
}
//将零件添加到适当的区域
MyWebPart MyWebPart=新建MyWebPart();
//设置web部件属性
经理添加网页部分(我的网页部分,“全页”,1);
}
最后
{
manager.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”,并将其作为“CustomViewPage.aspx”放在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Pages文件夹中

    步骤2:

    创建使用自定义方法显示视图项的自定义web部件。基本上使用GetViewfromUrl(“Lists/”)方法获取视图,然后检索web部件中的项目。自定义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>
    
    SPList list=SPContext.Current.list

    字符串strViewName=

    SPView view=SPContext.Current.Web.GetViewFromUrl(“列表/列表/”+strViewName)

    SPListItemCollection listItems=list.GetItems(视图)

    获取列表项后,请执行显示这些项的自定义方法

    构建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>
    

    
    CustomWebpartforView,版本=1.0.0.0,区域性=neutral,PublicKeyToken=e3483ddc8b0d437a
    CustomWebpartforView.MyCustomview
    没有一个
    真的
    用于查看的自定义Web部件
    ]]>
    

    此步骤给出了源文件路径的错误,我通过在文件标记中提供路径属性修改了源文件路径

    步骤4:

    现在,基本自定义视图页面与web部件一起提供。现在了解如何将自定义视图页面与列表定义集成。创建自定义列表定义,对于架构中定义的所有视图,请提及“SetupPath”以使用“CustomViewPage.aspx”。现在,自定义视图页面将用作列表定义中定义的所有视图的基本视图页面,以及以后创建的视图也将使用“CustomViewpage.aspx”作为基本页面。用于在schema.xml内声明视图的示例代码段如下所示:

    <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>
    

    安装并激活自定义列表定义的功能

    现在,通过所有这些步骤,当您基于此自定义列表定义创建列表时,所有创建的视图都将使用“CustomViewPage.aspx”创建视图页面,并且您的自定义web部件将被呈现,而不是OOB dataformwebpart。创建列表后(通过UI、通过对象模型)将要创建的视图也将使用“CustomViewpage.aspx”作为创建视图页的基页


    由于某些原因,我仍然无法看到带有自定义Web部件的CustomViewPage.aspx。这篇文章缺少什么东西了吗?

    在SharePoint 2010上,您可以在列表定义的Schema.xml内的同一视图定义中添加自定义Web部件或SharePoint Web部件