MVC Html Helper没有被解释

时间:2014-07-15 09:31:24

标签: html asp.net-mvc asp.net-mvc-4

我在MVC 5中尝试自定义HTML帮助程序,但它们没有在浏览器中解释。它们以字符串形式出现。

HTML Helper类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

public static class ImageHelper
{
    public static string ImageLink(this HtmlHelper helper, string id, string imgSrc, string altText)
    {
        var builder = new TagBuilder("img");

        builder.GenerateId(id);

        builder.MergeAttribute("src", imgSrc);
        builder.MergeAttribute("alt", altText);

        return builder.ToString(TagRenderMode.SelfClosing);
    }
}

HTML视图

@Html.ImageLink("objStatus", "/images/circle-205-i.png", "status")

浏览器显示:

string "<img alt="status" id="objStatus" src="/images/circle-205-i.png" />"

F12将其显示为不解释为HTML的字符串

1 个答案:

答案 0 :(得分:1)

你的助手正在返回一个MVC Razor将编码为HTML的字符串。正确的方法是返回一个像这样的MvcHtmlString:

public static MvcHtmlString ImageLink(this HtmlHelper helper, string id, string imgSrc, string altText)
{
    var builder = new TagBuilder("img");

    builder.GenerateId(id);

    builder.MergeAttribute("src", imgSrc);
    builder.MergeAttribute("alt", altText);

    return new MvcHtmlString(builder.ToString(TagRenderMode.SelfClosing));
}

另一种方法是在您的视图中使用Html.Raw,但您必须在任何地方都这样做。我在这里只提到它,因为它可以做到,上面是首选的解决方案。