我正在使用SharePoint 2010。我知道一个文档库的ID和其中一个文档的ID,但不知道该文档库所在的网站或站点。现在我需要在运行时获取该文档的完整URL。我已经尝试了以下方法。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
请回答这个问题。我正在使用SharePoint 2010。我知道一个文档库的ID和其中一个文档的ID,但不知道该文档库所在的网站或站点。现在我需要在运行时获取该文档的完整URL。我已经尝试了以下方法。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
请回答这个问题。在 SPListItem
上使用字段 "EncodedAbsUrl"。对于 SPFile
也适用:
SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];
或者对于一个SPFile
SPFile file = ...;
string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
内置字段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类。
试试这个,
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;
}
}
}
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;
}
对我来说它是有效的。希望我能帮到你(列表项URL)
item.Web.Url+"/"+item.File.Url
SPFile file;
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
就算是值得的,访问item.Web
属性意味着你实际上正在实例化SPWeb
对象,这意味着它应该被处理掉,否则会导致内存泄漏。
当已经有更好、更快的方法时,这是很多额外开销。
我会使用提到的BuiltInFieldId.EncodedAbsUrl
方法,因为这可以让你最轻松地访问你想要的内容。