我在扩展HtmlHelper类以呈现图像标记时遇到问题
我刚写了这段代码
namespace Mace_CrmSystem
{
public static class ExtendedHelper
{
public static TagBuilder HaidarImage(this HtmlHelper instance, string src) {
TagBuilder inst = new TagBuilder("img");
inst.MergeAttribute("src", src);
return inst;
}
}
}
并在索引视图中编写了此代码
@Html.HaidarImage("http://haidar.ws/wp-content/uploads/2014/07/ipaduse.jpg");
但问题是,当视图呈现标记时,它不会将其呈现为Hrml标记,而是将其呈现为普通文本,因此结果如下所示
<img src="http://haidar.ws/wp-content/uploads/2014/07/ipaduse.jpg"></img>;
另一个问题是我试图在web.config页面中添加名称空间以便在所有页面上可用,但是直到我在视图页面本身明确声明它时,intellisense才会显示扩展方法。
所以请任何人帮我解决我的问题。
答案 0 :(得分:2)
你必须像这样返回IHtmlString
,以便它呈现为Html:
public static IHtmlString HaidarImage(this HtmlHelper instance, string src)
{
TagBuilder inst = new TagBuilder("img");
inst.MergeAttribute("src", src);
return MvcHtmlString.Create(inst.ToString(TagRenderMode.SelfClosing));
}
答案 1 :(得分:2)
您应该从HtmlHelper扩展方法返回IHtmlString
,以便输出不是HTML编码的,因为它是不应再次编码的HTML标记。例如
public static IHtmlString HaidarImage(this HtmlHelper instance, string src)
{
TagBuilder inst = new TagBuilder("img");
inst.MergeAttribute("src", src);
return new HtmlString(inst.ToString(TagRenderMode.SelfClosing));
}
要修复所有视图中可用的方法,您需要将类的命名空间添加到Views文件夹中的web.config。
答案 2 :(得分:2)
我不确定你为什么从你的方法返回TagBuilder
,你应该返回MvcHtmlString,试试这个: -
public static MvcHtmlString HaidarImage(this HtmlHelper helper, string src)
{
TagBuilder tag = new TagBuilder("img");
tag.Attributes.Add("src", src);
return new MvcHtmlString(tag.ToString(TagRenderMode.SelfClosing));
}
为什么我们需要MvcHtmlString
,您可以阅读here。