2013-06-19 1 views
0

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

До сих пор у меня есть:
контроллер:

foreach (dynamic tweet in Timeline()) 
{ 
    string text = tweet["text"].ToString(); 
    const string pattern = @"http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?"; 
    Regex regexCheck = new Regex(pattern); 

    MatchCollection matches = regexCheck.Matches(text); 

    for (int i = 0; i < matches.Count; i++) 
    { 
     text = string.Format(@"<a href={0}>{1}</a>", matches[i].Value, matches[i].Value); 
    } 

    timeline.Add(text); 
} 

Вид:

@Html.DisplayFor(model => model.Timeline) 

Но он продолжает отображать буквальный текст!
Дисплей: <a href=http://t.co/fm0ruxjVXe>http://t.co/fm0ruxjVXe</a>

Может ли кто-нибудь показать мне, как это делается? Я новичок в MVC.

+1

Как Примечание- вам не хватает «до и после {0}. Должно быть: {1}.Они удваиваются, так как они должны быть экранированы. – Botis

+0

Пропущено это: P Спасибо за обновление. – TheGeekZn

ответ

3

, так как вы отправляете HTML уже, попробуйте

@Html.Raw(Model.Timeline) 

Другой вариант отправить только URL и текст и построить тег в представлении

<a href="@Model.Timline.Url">@Model.Timeline.Text</a> 

Это будет включать в себя изменение вашего свойства временной шкалы как объекта с двумя свойствами, текстом и URL-адресом.

+0

2-й подход звучит намного лучше imo. – Botis

+0

Использование' @ Html.Raw (Model.Timeline [0]) 'works :) Спасибо за обновление! – TheGeekZn

0

Помощники @ Html.DisplayFor в Razor автоматически декодирует выход

Если вы хотите просто выводить содержание model.Timeline, попробуйте просто с помощью Response.Write

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