如何呈现Asp.Net MVC河套平原的HTML链接?(How to render plain HT

2019-09-01 06:26发布

我想呈现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>

<% } %>

但我想知道如果它真的是正确的做法。 我失去了一些明显的MVC控制吗?

Answer 1:

你是不是缺少什么,但良好的做法是对的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);
        }

    }

那么你可以使用它像这样:

<tr>
        <td>
            <%= Html.Encode(item.Id) %>
        </td>
        <td>
            <%= Html.SimpleLink(item.Url,item.Text) %>
        </td>
    </tr>

[编辑]我忘了补充。 为了使用整个应用此的HtmlHelper扩展需要添加以下内容的网络配置文件:

<system.web>
      <pages>
         <namespaces>
            <!-- leave rest as-is -->
            <add namespace="theNamespaceWhereHtmlHelpersClassIs"/>
        </namespaces>
      </pages>
    </system.web>


Answer 2:

我想实现它的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));
}

可能看起来像矫枉过正只是生成一个链接,但它意味着你不必用字符串格式模式渣土约插入额外的HTML链接的属性



Answer 3:

我宁愿用

<td><a href="<%= item.Url %>">link</a></td>

似乎有点“清洁工”给我,但我觉得你的方法一样好。



Answer 4:

果园项目有哪些有一个链接建设者方法的扩展的HtmlHelper类。

请参阅:HtmlHelperExtensions.Link()

http://orchard.codeplex.com/SourceControl/changeset/view/dbec3d05e6d1#src%2fOrchard%2fMvc%2fHtml%2fHtmlHelperExtensions.cs

允许以下用法:

<li>@Html.Link(Model.Path, Model.Title)</li> 

更新上面的链接不再有效,但如果你下载源代码,你会发现其中有5个重载链接,其中一个看起来像这样HtmlHelperExtensions:

public static IHtmlString Link(this HtmlHelper htmlHelper, string linkContents, string href, IDictionary<string, object> htmlAttributes) {
        var tagBuilder = new TagBuilder("a") { InnerHtml = htmlHelper.Encode(linkContents) };
        tagBuilder.MergeAttributes(htmlAttributes);
        tagBuilder.MergeAttribute("href", href);
        return new HtmlString(tagBuilder.ToString(TagRenderMode.Normal));
    } 


Answer 5:

我认为这是很好的。 一个简单的foreach做MVC中的中继器的作用。



Answer 6:

为了避免HTML编码使用@ Html.Raw(URL)。



文章来源: How to render plain HTML links in Asp.Net MVC loop?