使用自定义母版页的sharepoint“库设置”中的例外情况

时间:2012-11-08 09:08:31

标签: sharepoint sharepoint-2010

FormServerTemplates

样式库

SiteCollectionImages

信息页

我有几个默认的sharepoint库,其中“库设置”点击我有例外:

enter image description here System.NullReferenceException:未将对象引用设置为对象的实例。在位于System.Web.UI.Page.ProcessRequestMain的System.Web.UI.Control.LoadRecursive()的ASP._layouts_listedit_aspx.OnLoad(EventArgs e)上的Microsoft.SharePoint.ApplicationPages.ListEditPage.OnLoad(EventArgs e)(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

我的所有调查都显示此问题,因为 DocumentTemplateUrl 为空!

this.strDocTemplateURL = "";
  if (this.iBaseType == SPBaseType.DocumentLibrary)
  {
    this.strDocTemplateURL = ((SPDocumentLibrary) this.spList).DocumentTemplateUrl;
    this.DocumentLibraryGeneralLinks.Visible = true;
  }
  if (this.strDocTemplateURL.Length != 0)

但有一个非常重要的说明,这个错误只出现在自定义母版页上!

默认的v4母版页没有任何问题。

有什么想法会导致问题吗?

2 个答案:

答案 0 :(得分:1)

如果不浏览主页,我的猜测是自定义母版页中缺少一些javascript。我将尝试比较使用v4母版页渲染时的HTML页面源与使用自定义母版页的渲染输出。然后我会比较javascript - 不只是在head部分和页面底部,而是整个。我将特别比较ContextInfo对象分配,并确保将这些属性分配给类似的值。

我的想法是“库设置”按钮需要一些javascript代码或引用,但无法找到,这就是导致错误的原因。

答案 1 :(得分:0)

至少这是一个非常奇怪的问题或奇怪的例外。但是在自定义母版页上找到了可能导致此异常的控件。

找到了可能导致该设置页面出现问题的两行代码:

1)web.Lists.TryGetList(listTitle);

2)RightsSensitiveVisibilityHelper.UserHasRights(PermissionContext.CurrentSite,                                                                       SPBasePermissions.AddListItems,                                                                       PermissionMode.Any,list);

没有例外但是如果我们将使用其中一种方法而不是异常会出现!

我认为这个错误是因为webpart在OnLoad方法中包含奇怪的代码,它确保子控件和创建标题:

 protected override void OnLoad(EventArgs e)
    {
        try
        {
            base.OnLoad(e);
            this.EnsureChildControls();
            this.InitWebPartHeader();
        }
        catch (Exception ex)
        {
            this.Controls.Clear();
            this.Controls.Add(new LiteralControl(ex.Message));
        }
    }

我不知道为什么我们有这个代码而且还有那里的注释“确保在事件之前调用CreateChildControls()。”

所以我希望这会为那些因同样错误而搜索的人节省时间。