16

我正在使用 SharePoint 2010。我在该库中有一个文档库 ID 和文档 ID。我没有任何网站,其中存在文档库。所以现在我必须获取文档的完整 URL在运行时。我怎样才能得到它。我尝试了以下方法。

string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;

请回答这个问题。

4

8 回答 8

49

使用SPListItem. 也适用于SPFile

SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];

或对于SPFile

 SPFile file = ...;
 string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
于 2011-03-07T08:22:36.977 回答
3

内置字段 id 肯定是最好的方法,但它返回编码后的 Url,这可能是也可能不是你想要的。

我认为最好的方法是在某处的实用程序类中添加一些扩展方法:

public static string AbsoluteUrl(this SPFile File, bool Decode = true)
{
    string EncodedUrl = File.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
    if (Decode)
        return SPEncode.UrlDecodeAsUrl(EncodedUrl);
    else
        return EncodedUrl;
}

然后调用如下

Item.File.AbsoluteUrl();

如果你想要一个解码的 URL 或

Item.File.AbsoluteUrl(false);

如果您希望 URL 保持编码状态。

请注意,解码的默认参数值仅在 .Net4+ 中可用,因此仅在 SP2013 中可用,但您可以轻松地为 SP2010 创建重载方法。您还需要对 Microsoft.SharePoint.Utilities 命名空间的引用才能访问 SPEncode 类。

于 2013-08-13T01:30:37.047 回答
2
public string GetItemURL(SPListItem item)
    {
        string web = item.Web.Url;
        string listID = item.ParentList.ID.ToString();
        string contentType = item.ContentTypeId.ToString();
        string itemID = item.ID.ToString();
        string url = web+"/_layouts/listform.aspx?PageType=4&ListID={"+listID+"}&ID="+itemID+"&ContentTypeID="+contentType;
        return url;
    }

它为我工作。希望我能帮助(列表项网址)

于 2012-01-03T14:45:34.290 回答
2

尝试这个 ,

          using (SPSite ospSite = new SPSite("http://abcd:24931"))
           {
              using (SPWeb web = ospSite.OpenWeb("/subsite")
               {
               // Get document library collection here and fetch all the document urls
                   SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["docu"]; 

                //where docu is my  document library
                SPListItemCollection items = docLib.Items;

                   foreach (SPListItem item in items)
                    {
                       string url = item.Url;
                    }
               }
          }

希望这会让你继续前进。

于 2011-03-07T07:51:32.967 回答
1

如果这是针对文档库的,请试试这个。

item.Web.Url+"/"+item.File.Url
于 2011-08-23T07:32:22.867 回答
1

使用以下代码获取文件的绝对 URL:

SPFile file;    
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
于 2013-10-01T10:34:04.207 回答
0

对于它的价值,访问该item.Web属性意味着您实际上是在实例化该SPWeb对象,这意味着应该处理它,否则您将导致内存泄漏。
当已经提到了更好更快的方法时,这是很多开销。

我会使用BuiltInFieldId.EncodedAbsUrl提到的方法,因为这使您可以最轻松地访问所需的内容。

于 2012-01-06T12:11:36.700 回答
-4

答案是字符串 url = currentweb.url+"/"+ Listitem.url;

于 2011-03-10T13:59:00.107 回答