Ответ 1
Вы можете извлечь фактические Url
и Description
из значения столбца таким образом:
SPFieldUrlValue fieldValue = new SPFieldUrlValue(myItem["URL"].ToString());
string linkTitle = fieldValue.Description;
string linkUrl = fieldValue.Url;
Когда я пытаюсь получить столбец, который является гиперссылкой, я получаю два элемента, разделенных запятыми, а не один.
Когда я вытаскиваю item["ColumnName"]
, я получаю его значение:
Почему он показывает ссылку и заголовок?
Вы можете извлечь фактические Url
и Description
из значения столбца таким образом:
SPFieldUrlValue fieldValue = new SPFieldUrlValue(myItem["URL"].ToString());
string linkTitle = fieldValue.Description;
string linkUrl = fieldValue.Url;
Поскольку на самом низком уровне все поля 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"])
Свойство 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/
Таким образом, SharePoint хранит ссылки. Сначала URL, а затем название, которое фактически показано на странице.
Из документации SharePoint:
"Поле URL уникально состоит из двух строк, разделенных запятой и пробелом. Одна строка содержит путь URL, а другая содержит описание, используемое как гиперссылнный текст.
Вам нужно разбить строку, чтобы получить две части.
string url = field["URL"].Split(',')[0];
string title = field["URL"].Split(',')[1];
Код не является оптимальным, но просто для того, чтобы точно показать, что я имею в виду.
Оливер, вы не указали версию SharePoint. Мой ответ на версию 2003 года. Если у вас есть MOSS, взгляните на классы SPFieldUrl и SPFieldUrlValue.