Поиск URL-адресов SharePoint для SPListItem

Когда я пытаюсь получить столбец, который является гиперссылкой, я получаю два элемента, разделенных запятыми, а не один.

Когда я вытаскиваю item["ColumnName"], я получаю его значение:

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

Почему он показывает ссылку и заголовок?

Ответы

Ответ 1

Вы можете извлечь фактические Url и Description из значения столбца таким образом:

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

string linkTitle = fieldValue.Description;

string linkUrl = fieldValue.Url;

Ответ 2

Поскольку на самом низком уровне все поля Sharepoint хранятся в виде строк. Метод GetFieldValue для SPField принимает строку, и логика этого класса поля должна считывать эту строку и преобразовывать ее в объект значимого значения.

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"])

Ответ 3

Свойство URL-адреса SPListItem возвращает URL-адрес для SPListItem, включая имя библиотеки List/Documetn, но не возвращает полный URL-адрес, включая имена серверов и сайтов.

Чтобы получить полный URL-адрес, вы можете объединить SPLIstItem.Web.Url и SPListItem.URL или извлечь полный URL-адрес из данных SPListItem.XML следующим образом:

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/

Ответ 4

Таким образом, SharePoint хранит ссылки. Сначала URL, а затем название, которое фактически показано на странице.

Из документации SharePoint:

"Поле URL уникально состоит из двух строк, разделенных запятой и пробелом. Одна строка содержит путь URL, а другая содержит описание, используемое как гиперссылнный текст.

Вам нужно разбить строку, чтобы получить две части.

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

Код не является оптимальным, но просто для того, чтобы точно показать, что я имею в виду.

Оливер, вы не указали версию SharePoint. Мой ответ на версию 2003 года. Если у вас есть MOSS, взгляните на классы SPFieldUrl и SPFieldUrlValue.