我在扩展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不会显示扩展方法,直到我在视图页面本身上明确声明它为止。

所以请任何人帮我解决我的问题。

最佳答案

您应该从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中。

09-10 01:06
查看更多