如何使用HtmlHelper类 - ASP.NET MVC显示图像

Ari*_*Ari 2 c# asp.net-mvc

我目前坚持使用HtmlHelper类显示图像的问题.

这就是我所拥有的.

我有一个自定义的HtmlHelper类,它应该显示一个图像:

public static string Images(this HtmlHelper helper, ......){

    var writer = new HtmlTextWriter(new StringWriter());
    byte[] bytearray = ... // some image byte array retrieved from an object.

    // begin html image tag - this is where the problem is
    writer.AddAttribute(HtmlTextWriterAttribute.Src, url.Action("GetPhoto", "Clinical", new { image = bytearray })); 
    writer.RenderBeginTag(HtmlTextWriterTag.Img); 
    writer.RenderEndTag();
    // end of image tag

    return writer.InnerWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)

所以我上面尝试做的是将一个Url.Action注入img源属性.

我有一个控制器"GetPhoto",支持处理该bytearray并返回一个图像.

public FileContentResult GetPhoto(byte[] image)
        {

            return File(image, "image/jpeg");
        }
Run Code Online (Sandbox Code Playgroud)

我设法到达控制器,但图像显示为null.有办法解决吗?或者更好的方法呢?非常感谢您的帮助,谢谢!

Dar*_*rov 8

控制器操作存在一些问题.它希望将图像作为字节数组传递.在你的助手类中,你试图生成一个img指向这个控制器动作的标签并传递一个字节数组,但这不起作用,因为你不能使用GET请求传递字节数组.您需要更改此控制器操作,以便不是接受字节数组,而是采用一些标识符,允许您获取图像并将其写入输出流.然后,您的html帮助程序将在生成img标记时传递此标识符.

public FileContentResult GetPhoto(string imageId)
{
    byte[] image = _repository.GetPhoto(imageId);
    return File(image, "image/jpeg");
}
Run Code Online (Sandbox Code Playgroud)

你的助手:

public static string Images(this HtmlHelper htmlHelper, string id,string alt)
{
    var urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
    var photoUrl = urlHelper.Action("GetPhoto", "Clinical", new { imageId = id });
    var img = new TagBuilder("img");
    img.MergeAttribute("src", photoUrl);
    img.MergeAttribute("alt", alt);
    return img.ToString(TagRenderMode.SelfClosing);
}
Run Code Online (Sandbox Code Playgroud)

可以在您的视图中使用:

<%= Html.Images("123") %>
Run Code Online (Sandbox Code Playgroud)