我正在尝试创建一个图像帮助器来渲染图像,但我的助手不会渲染图像。所有我能看到的内容都显示在下面的屏幕截图中。任何人都可以帮助发现原因吗?请帮忙。这是我的代码。
助手类
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")
的Web.Config
<add key="imageDirectory" value="http://localhost:49191"/>
截图
在浏览器上输入图片网址"http://localhost:49191/Content/Uploads/MySiteImages/TestImage.jpg"
时,我发现图片存在。
答案 0 :(得分:1)
您的问题是Razor会自动对每个string
进行HTML编码,该@
会使用Html.Raw
符号写入回复。
您可以使用@Html.Raw(Html.Image("TestImage.jpg", "testImg", "TestImg",
"/Content/Uploads/MySiteImages"))
方法关闭自动编码:
MvcHtmlString
或者您可以从助手返回Html.Raw
。这是ASP.NET MVC中更惯用的方式,在这种情况下,razor不会对您的HTML进行编码,因此您无需记住使用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));
}
:
{{1}}