我正在使用 SharePoint 2010。我在该库中有一个文档库 ID 和文档 ID。我没有任何网站,其中存在文档库。所以现在我必须获取文档的完整 URL在运行时。我怎样才能得到它。我尝试了以下方法。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
请回答这个问题。
我正在使用 SharePoint 2010。我在该库中有一个文档库 ID 和文档 ID。我没有任何网站,其中存在文档库。所以现在我必须获取文档的完整 URL在运行时。我怎样才能得到它。我尝试了以下方法。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
请回答这个问题。
使用SPListItem
. 也适用于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 类。
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;
}
它为我工作。希望我能帮助(列表项网址)
尝试这个 ,
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;
}
}
}
希望这会让你继续前进。
如果这是针对文档库的,请试试这个。
item.Web.Url+"/"+item.File.Url
使用以下代码获取文件的绝对 URL:
SPFile file;
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
对于它的价值,访问该item.Web
属性意味着您实际上是在实例化该SPWeb
对象,这意味着应该处理它,否则您将导致内存泄漏。
当已经提到了更好更快的方法时,这是很多开销。
我会使用BuiltInFieldId.EncodedAbsUrl
提到的方法,因为这使您可以最轻松地访问所需的内容。
答案是字符串 url = currentweb.url+"/"+ Listitem.url;