如何在Asp.Net MVC循环中呈现纯HTML链接?

Joa*_*rel 16 asp.net-mvc hyperlink

我想在ASP.NET MVC中呈现HTML链接列表.请注意,链接是设计网站的绝对和外部链接.以下代码有效:

<% foreach (var item in Model) { %>

    <tr>
        <td>
            <%= Html.Encode(item.Id) %>
        </td>
        <td>
            <%= String.Format("<a href=\"{0}\">link</a>", item.Url) %>
        </td>
    </tr>

<% } %>
Run Code Online (Sandbox Code Playgroud)

但我想知道它是否真的是正确的方法.我在这里错过了一些明显的MVC控件吗?

Gle*_*ven 27

我喜欢使用标记构建器类以MVC框架的方式实现它.这样我就可以通过htmlAttributes参数来添加类或其他属性:

public static MvcHtmlString HtmlLink(this HtmlHelper html, string url, string text, object htmlAttributes)
{
 TagBuilder tb = new TagBuilder("a");
 tb.InnerHtml = text;
 tb.MergeAttributes(new RouteValueDictionary(htmlAttributes));
 tb.MergeAttribute("href", url);
 return MvcHtmlString.Create(tb.ToString(TagRenderMode.Normal));
}
Run Code Online (Sandbox Code Playgroud)

为了生成一个链接似乎有点过分,但这意味着您不必使用字符串格式模式来在链接上插入其他HTML属性


Mis*_* N. 15

你没有遗漏任何东西,但好的方法是在HtmlHelper上创建扩展方法:

public static class HtmlHelpers
    {

        public static string SimpleLink(this HtmlHelper html, string url, string text)
        {
            return String.Format("<a href=\"{0}\">{1}</a>", url, text);
        }

    }
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

<tr>
        <td>
            <%= Html.Encode(item.Id) %>
        </td>
        <td>
            <%= Html.SimpleLink(item.Url,item.Text) %>
        </td>
    </tr>
Run Code Online (Sandbox Code Playgroud)

[编辑]我忘了添加.要在整个应用程序中使用此HtmlHelper扩展程序,您需要在Web配置文件中添加以下内容:

<system.web>
      <pages>
         <namespaces>
            <!-- leave rest as-is -->
            <add namespace="theNamespaceWhereHtmlHelpersClassIs"/>
        </namespaces>
      </pages>
    </system.web>
Run Code Online (Sandbox Code Playgroud)

  • 这允许在URL和文本中注入HTML.使用TagBuilder或至少记住属性编码url和html编码文本. (3认同)