我正在使用SharePoint 2010.我在该库中有一个文档库ID和文档ID。我没有web文件库所在的站点。所以现在我必须得到完整的URL在运行时的文档。我怎么能得到它。 我尝试了以下内容。
string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;
请回答这个问题。
答案 0 :(得分:48)
使用SPListItem
上的“EncodedAbsUrl”字段。适用于SPFile
:
SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];
或SPFile
SPFile file = ...;
string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
答案 1 :(得分: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保持编码状态。
请注意,Decode的默认参数值仅在.Net4 +中可用,因此仅在SP2013中可用,但您可以轻松地为SP2010创建过载方法。您还需要引用Microsoft.SharePoint.Utilities命名空间来访问SPEncode类。
答案 2 :(得分: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;
}
}
}
希望这会让你前进。
答案 3 :(得分:1)
如果这是针对文档库的,请尝试这个。
item.Web.Url+"/"+item.File.Url
答案 4 :(得分:1)
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;
}
这对我有用。希望我帮忙(列出项目网址)
答案 5 :(得分:0)
对于它的价值,访问item.Web
属性意味着您实际上正在实例化SPWeb
对象,这意味着应该将其处理掉,否则会导致内存泄漏。
当已经提到更好更快的方法时,这是一个很大的开销。
我会使用提到的BuiltInFieldId.EncodedAbsUrl
方法,因为这样可以让您轻松访问所需内容。
答案 6 :(得分:0)
使用以下代码获取文件的绝对URL:
SPFile file;
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
答案 7 :(得分:-4)
答案是 string url = currentweb.url +“/”+ Listitem.url;