SPList Url

At first I thought I didn’t look good when I was looking for the Url property on the SPList class because it’s child and parent classes has them (SPWebSPListItemSPFile) and thus, so I thought, the class itself should have it as well. But.. it doesnt! Aaargh.. Which properties are there to use then to you might wonder? Well first let me explain why I want to have the Url property. I’m trying to replace the default ListFormWebPart on the editform.aspx pages on certain lists and/or document libraries. To do this I use the SPLimitedWebPartManager and this thing requires a server-relative or absolute url to the page are you trying to access.

So at my first go I tried the following bit :

SPLimitedWebPartManager webPartManager = 
    web.GetLimitedWebPartManager(web.Url + "/lists/" + list.Title + "/editform.aspx", 
    System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);

But since the title of a list could be very different from the actual Url this was not really an option so I had to look for other properties and found the following:

  • RootFolder (thanks Ton :)
    • Simply replacing the list.Title with list.RootFolder
      SPLimitedWebPartManager webPartManager = 
          web.GetLimitedWebPartManager(web.Url + "/lists/" + list.RootFolder + "/editform.aspx", 
          System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
  • DefaultViewUrl
    • Some string manipulation at first and then you have this beautifully crafted server-relative url ;)
      string listUrl = list.DefaultViewUrl;  
      int index = listUrl.IndexOf("Forms") + 6;
      listUrl = listUrl.Remove(index);
      
      if (listUrl.EndsWith("/"))
      {
          listUrl = listUrl.Remove(listUrl.LastIndexOf("/"));
      }
      
      SPLimitedWebPartManager webPartManager =
          web.GetLimitedWebPartManager(listUrl + "/editform.aspx", 
          System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);

Taking this a step for further and using the technique that Adam Buenz blogged about at Writing Extension Methods for SharePoint it’s incorporated in the SPList class like so:

public static class Extensions
    {
        /// <summary>
        /// Returns a server relative url of the list
        /// </summary>
        /// <param name="typeToTarget"></param>
        /// <returns>string</returns>
        public static string Url(this SPList typeToTarget)
        {
            string listUrl = typeToTarget.DefaultViewUrl;
            if (typeToTarget is SPDocumentLibrary)
            {

                int index = listUrl.IndexOf("Forms") + 6;
                listUrl = listUrl.Remove(index);

                if (listUrl.EndsWith("/"))
                {
                    listUrl = listUrl.Remove(listUrl.LastIndexOf("/"));
                }
            }
            else
            {
                int indexSlash = listUrl.LastIndexOf("/");
                listUrl = listUrl.Remove(indexSlash);
            }
            return listUrl;
        }
    } 

And the end result being :

SPList list = SPContext.Current.Web.Lists[new Guid(id)];

SPLimitedWebPartManager webPartManager =
    web.GetLimitedWebPartManager(list.Url + "/editform.aspx", 
    System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);

转载于:https://www.cnblogs.com/EricLee007/archive/2012/06/21/2558088.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值