SPListItem的SharePoint URL检索

时间:2009-03-04 20:08:40

标签: sharepoint list

当我尝试检索作为超链接的列时,我得到两个以逗号分隔的项而不是一个。

当我拉item["ColumnName"]时,我得到它的值:

  

http://www.google.com/article/583,%20title%20gets%20stars

为什么显示链接和标题?

4 个答案:

答案 0 :(得分:26)

您可以通过以下方式从列值中提取实际UrlDescription

SPFieldUrlValue fieldValue = new SPFieldUrlValue(myItem["URL"].ToString());

string linkTitle = fieldValue.Description;

string linkUrl = fieldValue.Url;

答案 1 :(得分:6)

因为在最低级别,所有Sharepoint字段都存储为字符串。 SPField的GetFieldValue方法接受一个字符串,该字段类的逻辑取决于读取该字符串并将其转换为有意义的值对象。

item [“FieldName”]返回表示字段值的通用对象。除了作为数据的原始字符串表示之外,对象本身通常是无用的。

如果您使用GetFieldValueAsHtml()方法,它将返回<a href="url">title</a>

//if field is of type Hyperlink, returns <a href="url">title</a>
item.Fields["FieldName"].GetFieldValueAsHtml(item["FieldName"])

或者

//if field is of type Hyperlink, returns Url, Title
item.Fields["FieldName"].GetFieldValueAsText(item["FieldName"])

或者

//if field is of type Hyperlink, returns Url
item.Fields["FieldName"].GetValidatedString(item["FieldName"])

答案 2 :(得分:2)

SPListItem URL属性确实返回SPListItem的URL,包括List / Documetn库名称,但它不会返回包含服务器和站点名称的完整URL。

要获取完整的URL,您可以连接SPLIstItem.Web.Url和SPListItem.URL,也可以从SPListItem.XML数据中提取完整的URL,如下所示:

foreach (SPListItem item in list.Items)
{
  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.LoadXml(item.Xml);

  XmlNamespaceManager nsm = new XmlNamespaceManager(xmlDoc.NameTable);
  nsm.AddNamespace("z", "#RowsetSchema");

  string fullURL = xmlDoc.SelectSingleNode("z:row", nsm).Attributes["ows_EncodedAbsUrl"].Value;
}

http://insomniacgeek.com/code/how-to-get-the-full-url-from-splistitem-in-sharepoint/

答案 3 :(得分:0)

这就是SharePoint存储链接的方式。首先是URL,然后是页面上实际显示的标题。

从SharePoint文档:

“URL字段唯一由两个以逗号和空格分隔的字符串组成。一个字符串包含URL路径,另一个字符串包含用作超链接文本的描述。”

你必须将字符串拆分为两部分。

string url = field["URL"].Split(',')[0];
string title = field["URL"].Split(',')[1];

代码不是最佳的,只是为了向您展示我的意思。

Oliver,您没有指定SharePoint版本。我的答案是2003版。如果您有MOSS,请查看 SPFieldUrl SPFieldUrlValue 类。