2015-11-17 4 views
1

Я пытаюсь использовать пользовательский HtmlHelper в своем представлении, чтобы отобразить ссылку, но она получает кодировку HTML.My HtmlHelper теряет Html Encoding

На мой взгляд, я звоню помощника, как это:

<td> 
    @Html.Urls(item.TaskUrl) 
</td> 

И мой помощник выглядит следующим образом:

public static class MkpHelpers 
{ 
    public static string Urls(this HtmlHelper helper, string value) 
    { 
     var items = value.Split(';'); // use your delimiter 
     var sb = new StringBuilder(); 
     foreach (var i in items) 
     { 
      var linkBuilder = new TagBuilder("a"); 
      linkBuilder.MergeAttribute("href",i); 
      linkBuilder.InnerHtml = i; 
      sb.Append(linkBuilder.ToString()); 
     } 
     return sb.ToString(); 
    } 
} 

Вынесено, оно выглядит следующим образом:

&lt;a href="http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552"&gt; 
    http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552 
&lt;/a&gt; 

Я предполагаю, что я делаю что-то неправильно, это должно быть довольно просто/очевидно.

+0

Вы пробовали '@ Html.Raw()' на ваш взгляд? –

ответ

3

Будьте осторожны с атаками впрыска. Это, как говорится, вам необходимо вернуть HTMLString:

public static class MkpHelpers 
{ 
    public static HtmlString Urls(this HtmlHelper helper, string value) 
    { 
    var items = value.Split(';'); // use your delimiter 
    var sb = new StringBuilder(); 
    foreach (var i in items) 
    { 
     var linkBuilder = new TagBuilder("a"); 
     linkBuilder.MergeAttribute("href",i); 
     linkBuilder.InnerHtml = i; 
     sb.Append(linkBuilder.ToString()); 
    } 
    return new HtmlString(sb.ToString()); 
    } 
} 

HtmlString derrives из IHtmlString:

Представляет строку HTML-закодирован, которые не должны быть закодированы снова.