Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SharePoint中的多个Web部件和功能区_Sharepoint_Sharepoint 2010_Web Parts_Ribbon Control - Fatal编程技术网

SharePoint中的多个Web部件和功能区

SharePoint中的多个Web部件和功能区,sharepoint,sharepoint-2010,web-parts,ribbon-control,Sharepoint,Sharepoint 2010,Web Parts,Ribbon Control,我正在将ribbon与我的Web部件关联。我需要在一个页面中添加两个以上的Web部件 我不希望每个Web部件都有单独的上下文组/选项卡。是否有方法检查页面上当前功能区中是否存在特定的组/选项卡 此时,当我将多个Web部件添加到页面时,会出现以下错误: 项已添加。字典中的键:“Ribbon.MyContextAltabGroup”正在添加的键:“Ribbon.MyContextAltabGroup” 以下是我的代码供您参考: /// <summary> /// Gets the web

我正在将ribbon与我的Web部件关联。我需要在一个页面中添加两个以上的Web部件

我不希望每个Web部件都有单独的上下文组/选项卡。是否有方法检查页面上当前功能区中是否存在特定的组/选项卡

此时,当我将多个Web部件添加到页面时,会出现以下错误:

项已添加。字典中的键:“Ribbon.MyContextAltabGroup”正在添加的键:“Ribbon.MyContextAltabGroup”

以下是我的代码供您参考:

/// <summary>
/// Gets the web part contextual info.
/// </summary>
public WebPartContextualInfo WebPartContextualInfo
{
    get
    {
        var webPartContextualInfo = new WebPartContextualInfo();
        var webPartRibbonContextualGroup = new WebPartRibbonContextualGroup();
        var webPartRibbonTab = new WebPartRibbonTab();

        webPartRibbonContextualGroup.Id = "Ribbon.MyContextualTabGroup";
        webPartRibbonContextualGroup.Command = "MyContextualTab.EnableContextualGroup";
        webPartRibbonContextualGroup.VisibilityContext = "MyContextualTab.CustomVisibilityContext";

        webPartRibbonTab.Id = "Ribbon.MyTab";
        webPartRibbonTab.VisibilityContext = "MyContextualTab.CustomVisibilityContext";

        webPartContextualInfo.ContextualGroups.Add(webPartRibbonContextualGroup);
        webPartContextualInfo.Tabs.Add(webPartRibbonTab);
        webPartContextualInfo.PageComponentId = SPRibbon.GetWebPartPageComponentId(this);

        return webPartContextualInfo;
    }
}

/// <summary>
/// Adds the contextual tab.
/// </summary>
private void AddContextualTab()
{
    SPRibbon spRibbon = SPRibbon.GetCurrent(Page);

    if (spRibbon == null) return;

    var ribbonExtensions = new XmlDocument();

    ribbonExtensions.LoadXml(_contextualTab);
    spRibbon.RegisterDataExtension(ribbonExtensions.FirstChild, "Ribbon.ContextualTabs._children");

    ribbonExtensions.LoadXml(_contextualTabTemplate);
    spRibbon.RegisterDataExtension(ribbonExtensions.FirstChild, "Ribbon.Templates._children");
}

/// <summary>
/// The event handler for the System.Web.UI.Control.PreRender event that occurs immediately before the Web Part is rendered to the Web Part Page it is contained on.
/// </summary>
/// <param name="e">A System.EventArgs that contains the event data.</param>
protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);

    AddContextualTab();

    ClientScriptManager clientScriptManager = Page.ClientScript;
    clientScriptManager.RegisterClientScriptBlock(GetType(), "MyWebPart", DelayScript);
}
//
///获取web部件上下文信息。
/// 
公共WebPartContextualInfo WebPartContextualInfo
{
得到
{
var webPartContextualInfo=新的webPartContextualInfo();
var webPartRibbonContextualGroup=新的webPartRibbonContextualGroup();
var webPartRibbonTab=新的webPartRibbonTab();
webPartRibbonContextualGroup.Id=“Ribbon.myContextAltabGroup”;
webPartRibbonContextualGroup.Command=“myContextAltab.EnableContextualGroup”;
webPartRibbonContextualGroup.VisibilityContext=“myContextAltab.CustomVisibilityContext”;
webPartRibbonTab.Id=“Ribbon.MyTab”;
webPartRibbonTab.VisibilityContext=“myContextAltab.CustomVisibilityContext”;
webPartContextualInfo.ContextualGroups.Add(webPartRibbonContextualGroup);
添加(webPartRibbonTab);
webPartContextualInfo.PageComponentId=SPRibbon.GetWebPartPageComponentId(此);
返回webPartContextualInfo;
}
}
/// 
///添加上下文选项卡。
/// 
私有void addContextAltab()
{
SPRibbon SPRibbon=SPRibbon.GetCurrent(第页);
if(spRibbon==null)返回;
var ribbonExtensions=new XmlDocument();
LoadXml(_contextualTab);
spRibbon.RegisterDataExtension(ribbonExtensions.FirstChild,“Ribbon.ContextualTabs._children”);
LoadXml(_contextualTabTemplate);
spRibbon.RegisterDataExtension(ribbonExtensions.FirstChild,“Ribbon.Templates._children”);
}
/// 
///System.Web.UI.Control.PreRender事件的事件处理程序,该事件发生在将Web部件呈现到其所包含的Web部件页面之前。
/// 
///包含事件数据的System.EventArgs。
受保护的覆盖无效OnPreRender(EventArgs e)
{
基于预渲染(e);
addContextAltab();
ClientScriptManager ClientScriptManager=Page.ClientScript;
RegisterClientScriptManager.RegisterClientScriptBlock(GetType(),“MyWebPart”,DelayScript);
}

不能在web部件的不同实例之间共享上下文功能区。因为只有web部件实例在页面上具有“焦点”时,功能区才会显示。因此,web部件的多个实例必须创建它们自己的上下文组

为避免功能区ID重复,请将特定于web部件实例的零件附加到功能区ID。您可以使用web部件的
ID

webPartRibbonContextualGroup.Id = "Ribbon.MyContextualTabGroup." + ID;
// ...
webPartRibbonTab.Id = "Ribbon.MyTab." + ID;
// etc.

我以前试过这个。我想我得回到这个话题上去了。你能和我分享一些技巧吗?如何根据Web部件的焦点隐藏/显示上下文组?对我来说,默认情况下,它显示所有两个组。