Поиск URL-адреса SharePoint для SPListItem - PullRequest
14 голосов
/ 04 марта 2009

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

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

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

Почему отображается ссылка и заголовок?

Ответы [ 4 ]

26 голосов
/ 05 марта 2009

Вы можете извлечь действительные значения Url и Description из значения столбца следующим образом:

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

string linkTitle = fieldValue.Description;

string linkUrl = fieldValue.Url;
6 голосов
/ 04 марта 2009

Поскольку на самом низком уровне все поля 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"])
2 голосов
/ 22 октября 2009

Свойство 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/

0 голосов
/ 04 марта 2009

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...