2013-05-02 60 views
1

我试图创建一个图像助手,该图像助手将呈现图像,但我的助手不会呈现图像。我能看到的所有内容都显示在下面的屏幕截图中。任何人都可以帮助找出原因?请帮忙。这是我的代码。图像助手不会呈现图像(MVC3)

助手类

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"/> 

截图 enter image description here

当进入上我看到图像存在浏览器中的图像URL "http://localhost:49191/Content/Uploads/MySiteImages/TestImage.jpg"

回答

1

你的问题是Razor自动将HTML编码为每个string,它被写入带有@符号的响应中。

您可以关闭自动编码,Html.Raw方法:

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

或者你可以从你的助手返回MvcHtmlString。这是在ASP.NET MVC在这种情况下剃刀不会编码您的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)); 
} 
+0

太感谢你了!这解决了我的问题。 – 2013-05-02 07:21:08