我目前坚持使用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.有办法解决吗?或者更好的方法呢?非常感谢您的帮助,谢谢!
控制器操作存在一些问题.它希望将图像作为字节数组传递.在你的助手类中,你试图生成一个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)