TheGeekZn
TheGeekZn

Reputation: 3924

change link in text to hyperlink in controller

I'm having trouble converting text to a hyperlink in a controller, then sending it to the view.

So far, I have:
Controller:

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);
}

View:

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

But It keeps displaying the literal text!
Display: <a href=http://t.co/fm0ruxjVXe>http://t.co/fm0ruxjVXe</a>

Could anyone please show me how this is done? I am quite new to MVC.

Upvotes: 0

Views: 1204

Answers (2)

dave clements
dave clements

Reputation: 1505

The @Html.DisplayFor helpers in Razor automatically encode the output

If you want to just output the content of model.Timeline, try just using Response.Write

Upvotes: 0

Slicksim
Slicksim

Reputation: 7172

since you are sending out html already, try

 @Html.Raw(Model.Timeline)

Another option is to send out just the url and the text and build the a tag in the view

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

That will involve changing your timeline property to being an object with two properties, text and url .

Upvotes: 3

Related Questions