2009-03-04 4 views
14

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

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

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

Почему это показывает связь и название?

ответ

0

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

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

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

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

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

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

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

6

Поскольку на самом нижнем уровне все поля 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"]) 
+0

Это будет возвращать HTML код для визуализации значения поля непосредственно на странице – muerte

+0

Спасибо meurte, не были сделаны ответом. –

+0

Thats WSS 3.0 правильно? – muerte

26

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

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

string linkTitle = fieldValue.Description; 

string linkUrl = fieldValue.Url; 
2

URL, свойство SPListItem делает возвращает URL для SPListItem включая имя списка/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/

Смежные вопросы