我在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的字符串
答案 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
,但您必须在任何地方都这样做。我在这里只提到它,因为它可以做到,上面是首选的解决方案。