1

我正在尝试创建一个将渲染图像的图像助手,但我的助手不渲染图像。我能看到的都显示在下面的屏幕截图中。任何人都可以帮助找出原因吗?请帮忙。这是我的代码。

助手类

using System.Configuration;
using System.Web.Mvc;

namespace CMS.Helpers
{
    public static class ImageHelper
    {

        public static string Image(this HtmlHelper htmlHelper, string fileName, string id, string alt, string contentPath)
        {
            var imgDirectory = ConfigurationManager.AppSettings["imageDirectory"];
            var imagePath = string.Format("{0}{1}", imgDirectory, contentPath);
            var file = string.Format("{0}{1}", imagePath, fileName);
            var img = new TagBuilder("img");
            img.MergeAttribute("src", file);
            img.MergeAttribute("alt", alt);
            return img.ToString(TagRenderMode.SelfClosing);
        }
    }
}

看法

@Html.Image("TestImage.jpg", "testImg", "TestImg", "/Content/Uploads/MySiteImages")

网络配置

<add key="imageDirectory" value="http://localhost:49191"/>

截屏 在此处输入图像描述

在浏览器上输入图片网址"http://localhost:49191/Content/Uploads/MySiteImages/TestImage.jpg"时,我看到图片存在。

4

1 回答 1

1

您的问题是 Razor 会自动对使用该符号string写入响应的每个内容进行HTML 编码。@

您可以使用以下方法关闭自动编码Html.Raw

@Html.Raw(Html.Image("TestImage.jpg", "testImg", "TestImg", 
                     "/Content/Uploads/MySiteImages"))

或者你可以MvcHtmlString从你的助手那里回来。这是 ASP.NET MVC 中更惯用的方式,在这种情况下,razor 不会对您的 HTML 进行编码,因此您无需记住使用Html.Raw

public static MvcHtmlString Image(this HtmlHelper htmlHelper, 
     string fileName, string id, string alt, string contentPath)
{
     var imgDirectory = ConfigurationManager.AppSettings["imageDirectory"];
     var imagePath = string.Format("{0}{1}", imgDirectory, contentPath);
     var file = string.Format("{0}{1}", imagePath, fileName);
     var img = new TagBuilder("img");
     img.MergeAttribute("src", file);
     img.MergeAttribute("alt", alt);
     return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing));
}
于 2013-05-02T07:08:47.193 回答