首页 > 代码库 > SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件

SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件

  在该文章中,我将介绍如何使用TaxonomyWebTaggingControl控件, 首先我相信您已经在SharePoint Managed Metadata Service里定义Term Sets,如果没有,请先定义您的Term Sets(可以参考该文章how to create metadata column), 该控件能帮助我们显示/设置各种Terms。

  其次我们需要了解Managed Metadata的结构,请看以下图,您可以清晰地看到每一个结构(Term Store -> Group -> Term Set -> Terms),接下来我们进入主题, 该如何使用TaxonomyWebTaggingControl 控件绑定这些数据呢,在该案例中我们绑定Product Type Group的所有数据。

 

  根据以下步骤:

  1. 在我们的设计页面中定义注册Microsoft.SharePoint.Taxonomy控件
<%@ Register TagPrefix="Taxonomy" Namespace="Microsoft.SharePoint.Taxonomy" Assembly="Microsoft.SharePoint.Taxonomy, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

  2.  在内容部分添加TaxonomyWebTaggingControl控件

<Taxonomy:TaxonomyWebTaggingControl ID="twtc_productType" runat="server"></Taxonomy:TaxonomyWebTaggingControl>

  3.  在后台绑定数据(从Managed Metadata Service中获取Group的数据)

  

 1 using Microsoft.SharePoint; 2 using Microsoft.SharePoint.Taxonomy; 3  4 /// <summary> 5 /// TaxonomyWebTaggingControl Bind 6 /// </summary> 7 /// <param name="productTypeControl">TaxonomyWebTaggingControl Control</param> 8 public static void ProductTypeBind(TaxonomyWebTaggingControl productTypeControl) 9         {10             // Open the site11             using (SPSite site = new SPSite(SPContext.Current.Web.Url))12             {13                 using (SPWeb web = site.OpenWeb())14                 {15                     TaxonomySession session = new TaxonomySession(site);16                     // Get the Term Store node from Managed Metadata Service17                     TermStore termStore = null;18                     if (session.TermStores != null && session.TermStores.Count > 0)19                    {20                       termStore = session.TermStores["Managed Metadata Service"]; //if you a custom meta service you should change name.21                     }22                     if (termStore != null)23                     {24                         //Guid anchorId = new Guid();25                         Group group = termStore.Groups["Product Type"]; // Get the Group node from Managed Metadata Service26                         productTypeControl.SspId.Add(termStore.Id); // do it for all termsets27                         foreach (TermSet item in group.TermSets)28                         {29                             productTypeControl.TermSetId.Add(item.Id); // Add the Term30                             /*  This could be achieved by setting AnchorId property for TaxonomyWebTaggingControl control that allows to specify ID of parent Term for any valid value in control.31                             foreach (Term term in item.Terms)32                             {33                                 if (term.Name == ManagedMetadataType.TermName)34                                 {35                                     anchorId = term.Id;36                                     break;37                                 }38                             } */ 39                         }40 41                         //productTypeControl.AnchorId = anchorId;42                         productTypeControl.GroupId = group.Id;43                         productTypeControl.IsAddTerms = false;44                     }45                 }46             }47         }

  以上代码将可以获取Product Type(defined by GB/T 13702-1992)节点的数据, 可以查看一下效果图

  有些朋友会问是否可以根据Term 节点作为父节点显示?对于该问题的回答是可以, 比如我想以All为父节点,我们仅仅通过该控件中的AnchorId属性,将All的id赋值给AnchorId即可,留心的朋友会发现在以上代码中注释部分就是实现该功能

  

  如果有大牛认为有更好的idea, 请提供您宝贵的建议供大家学习,谢谢

SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件