【问题标题】:Extending HtmlHelper class asp.net mvc4扩展 HtmlHelper 类 asp.net mvc4
【发布时间】:2015-04-15 10:18:41
【问题描述】:

我在扩展 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 页面中添加命名空间,以便在所有页面上都可用,但智能感知不会显示扩展方法,直到我在视图页面本身明确声明它。

所以请谁能帮我解决我的问题。

【问题讨论】:

  • 将方法改为public static MvcHtmlString HaidarImage(..)并添加return MvcHtmlString.Create(inst.ToString());

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

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

【讨论】:

  • 很好的答案,非常感谢,这解决了我的问题,但我在复数视力中找到了一个课程,它描述了使用 TagBuilder 类的扩展,并且与我编写的代码完全相同,所以我不知道如果在他们发布新版本的 mvc 之前,这在之前版本的 mvc 中一直有效。
【解决方案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

【讨论】:

    【解决方案3】:

    您必须像这样返回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));   
      }
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多