Sharepoint 2010 &引用;指定的视图无效";调用SharePoint 2010中的LimitedWebPartManager.AddWebPart

Sharepoint 2010 &引用;指定的视图无效";调用SharePoint 2010中的LimitedWebPartManager.AddWebPart,sharepoint-2010,Sharepoint 2010,此代码用于在WSS 3.0/MOSS 2007的FeatureReceiver.FeatureActivated中工作: using (SPLimitedWebPartManager limitedWebPartManager = Site.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared)) { ListViewWebPart listViewWebPart = new ListViewWebPar

此代码用于在WSS 3.0/MOSS 2007的FeatureReceiver.FeatureActivated中工作:

using (SPLimitedWebPartManager limitedWebPartManager = Site.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared)) {
    ListViewWebPart listViewWebPart = new ListViewWebPart {
        Title = title,
        ListName = list.ID.ToString("B").ToUpper(),
        ViewGuid = view.ID.ToString("B").ToUpper()
    };
    limitedWebPartManager.AddWebPart(listViewWebPart, zone, position);
}
我正在尝试转换为SharePoint 2010,但现在由于以下原因而失败:

System.ArgumentException: The specified view is invalid.
at Microsoft.SharePoint.SPViewCollection.get_Item(Guid guid)
at Microsoft.SharePoint.WebPartPages.ListViewWebPart.EnsureListAndView(Boolean requireFullBlownViewSchema)
at Microsoft.SharePoint.WebPartPages.ListViewWebPart.get_AppropriateBaseViewId()
at Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal(SPSupersetWebPart superset, Boolean throwIfLocked)
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPartInternal(WebPart webPart, String zoneId, Int32 zoneIndex, Boolean throwIfLocked)
at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart(WebPart webPart, String zoneId, Int32 zoneIndex)
有趣的是,当我从一个单元测试运行它时,它工作正常,只在FeatureActivated中失败。当我调试Reflector时,它在这一行失败:

this.view = this.list.LightweightViews[new Guid(this.ViewGuid)];

list.LightweightViews仅返回一个视图,即默认视图,即使list.Views返回所有视图。从单元测试运行时,LightweightViews返回所有我的视图。我不知道LightweightViews是什么意思,我的想法也快用完了。还有其他人有吗?

希望没有人有过这个问题,甚至没有人看到过这个问题。不幸的是,你遇到了同样的问题,我没有具体的解决办法。它最终开始对我起作用(8小时后)。我可以告诉你我在它开始工作之前做了什么,希望它能有所帮助:

我通过UI进入并将试图设置列表视图web部件的视图设置为默认视图。我相信这就是修复它的原因,我不知道为什么

关于这个问题的其他一些注意事项:

  • 我通过代码创建所有列表和视图
  • RunWithElevatedPrivileges没有帮助
  • 在激活的功能中实例化新的SPWeb没有帮助
  • 设置ListViewXml=view.HtmlSchemaXml而不是设置ViewGuid使其不会崩溃,但在FeatureActivated中执行此代码时视图错误,但在单元测试中执行时视图正确

对不起,我已经尽力了。如果你有这个问题,祝你好运

要使其工作,只需执行以下操作:

  • 不要设置listviewwebpart对象的viewguid属性(保留为空)
  • 调用AddWebpart方法
它将生成与新隐藏视图关联的新viewguid。 然后,如果您想自定义此视图,请从列表中检索并自定义它。

在阅读了一些文章后,我发现了更简单的解决方案。 将listviewwebpart添加到任意页面时,webpart会自动在列表中创建新的隐藏视图,该视图与此Web部件关联(您可以在SharePoint Manager中进行检查)。
当您切换listviewwebpart抛出UI的视图时,它只需从所选视图获取字段的副本,并将其推送到隐藏视图中

您只需按ID获取此视图,添加\删除必要的字段并更新视图。大概是这样的:

            var wpMngr = web.GetLimitedWebPartManager(workspaceWeb.Url + "/default.aspx", PersonalizationScope.Shared);
            var attendeeListViewWebPart =
                (ListViewWebPart)wpMngr.WebParts.Cast<WebPart>().FirstOrDefault(w => w.Title == Lists.AttendeesList);
            var list = workspaceWeb.Lists[Lists.AttendeesList];
            var view = list.Views.Cast<SPView>().FirstOrDefault(w => w.ID.ToString("B").Equals(attendeeListViewWebPart.ViewGuid, StringComparison.OrdinalIgnoreCase));
            view.ViewFields.DeleteAll();
            view.ViewFields.Add...
            view.Update();
var wpMngr=web.GetLimitedWebPartManager(workspaceWeb.Url+“/default.aspx”,PersonalizationScope.Shared);
var AttendeListViewWebPart=
(ListViewWebPart)wpMngr.WebParts.Cast().FirstOrDefault(w=>w.Title==Lists.AttendeesList);
var list=workspaceWeb.Lists[Lists.AttendesList];
var view=list.Views.Cast().FirstOrDefault(w=>w.ID.ToString(“B”).Equals(attendeeListViewWebPart.ViewGuid,StringComparison.OrdinalIgnoreCase));
view.ViewFields.DeleteAll();
view.ViewFields.Add。。。
view.Update();

根据文章,您无法更新listviewwebpart的ViewGuid属性。

我今天也一直在努力解决这个问题

出于一些奇怪的原因,您提供的代码在某些情况下有效,但在其他情况下无效

我还没有时间对此进行更多的调查,但我可以说的是,如果您愿意使用XsltListViewWebPart(它是SharePoint 2010中ListViewWebPart的替代品),您将摆脱这个恼人的“bug”

我刚刚对自己进行了测试


希望有帮助

我在一个
XsltListViewWebPart
中遇到了同样的错误:

 Exception: System.ArgumentException: The specified view is invalid.
 at Microsoft.SharePoint.SPViewCollection.get_Item(Guid guid)
 at Microsoft.SharePoint.SPList.GetView(Guid viewGuid)
 at Microsoft.SharePoint.SPList.GetView(String viewGuid)
 at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.EnsureView()
 at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.get_AppropriateBaseViewId()
 at Microsoft.SharePoint.WebPartPages.SPWebPartManager.AddWebPartInternal(SPSupersetWebPart superset, Boolean throwIfLocked)
 at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPartInternal(WebPart webPart, String zoneId, Int32 zoneIndex, Boolean throwIfLocked)
 at Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager.AddWebPart(WebPart webPart, String zoneId, Int32 zoneIndex)
因为是一个公共方法,所以我在Powershell中使用新视图中的Guid进行了尝试。它工作得很好

我发现问题出在上下文上。在作业之前,我一直在创建我的视图。当我将视图的创建移到外部时,代码运行时没有任何错误:

SPView view = CreateHiddenView(list);
using (SPLimitedWebPartManager manager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
    try
    {
        XsltListViewWebPart webpart = new XsltListViewWebPart();
        webpart.ListName = list.ID.ToString("B").ToUpperInvariant();
        webpart.TitleUrl = list.DefaultViewUrl;
        webpart.WebId = list.ParentWeb.ID;
        webpart.Title = list.Title;
        webpart.ViewGuid = view.ID.ToString("B").ToUpperInvariant();
        manager.AddWebPart(webpart, "Right", 1);
    }
    finally
    {
        manager.Web.Dispose();
    }
}

这个选择对我来说也很有效:1。不要设置ViewGuid,2。添加Web部件,3。设置ViewGuid,4。保存更改