我想显示与文件类型关联的图标。这样
asp.net mvc图标渲染
但背景是什么为黑色(在Firefox和IE),在铬它是透明的,其良好的。
我控制器
public ActionResult GetFileTypeIcon(string fileName)
{
var photo = PhotoModel.GetFileTypeIcon(fileName);
if (photo == null)
{
return File(Url.Content("~/Content/Images/nofile.png"), "image/png");
}
var stream = new MemoryStream(photo);
return File(stream.ToArray(), "image/bmp");
}
我也试着图标转换成PNG但比图像质量很不好。
var stream = new MemoryStream(photo);
var iconStream = new MemoryStream();
Image.FromStream(stream).Save(iconStream, System.Drawing.Imaging.ImageFormat.Png);
return File(stream.ToArray(), "image/png");
视图(我使用的DevExpress网格)
@Html.DevExpress().GridView(settings =>
{
settings.Name = "attachmentsGrid";
settings.Columns.Add(col =>
{
col.Caption = "Назва";
col.SetDataItemTemplateContent(c =>
{
ViewContext.Writer.Write("<table><tr><td>");
//Html.DevExpress().BinaryImage(imageSettings =>
//{
// imageSettings.Width = 16;
// imageSettings.Height = 16;
//}).Bind(PhotoModel.GetFileTypeIcon(DataBinder.Eval(c.DataItem, "_name").ToString())).Render();
ViewContext.Writer.Write("<img height=\"16px\" width=\"16px\" src=\"" + Url.Action("GetFileTypeIcon", "Photo", new { fileName = DataBinder.Eval(c.DataItem, "_name").ToString() }) + "\" alt=\"image\" />");
ViewContext.Writer.Write("</td><td>");
ViewContext.Writer.Write("  ");
ViewContext.Writer.Write(
Html.ActionLink(DataBinder.Eval(c.DataItem, "_name").ToString(), "Download", new { Link = DataBinder.Eval(c.DataItem, "_link"), Name = DataBinder.Eval(c.DataItem, "_name") }));
ViewContext.Writer.Write("</td></tr></table>");
});
});
和方法这就是返回图像作为字节数组。 RegisteredFileType.ExtractIconFromFile - 返回一个图标。
public static byte[] GetFileTypeIcon(string filename)
{
try
{
byte[] array;
var fileType = filename.Split('.').LastOrDefault();
fileType = "." + fileType.ToLower();
string fileAndParam = (_iconsInfo[fileType]).ToString();
if (String.IsNullOrEmpty(fileAndParam))
return null;
var icon = RegisteredFileType.ExtractIconFromFile(fileAndParam, false);
using (var ms = new MemoryStream())
{
icon.ToBitmap().Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
array = ms.ToArray();
}
return array;
}
catch (Exception)
{
return null;
}
我是改变methhod GetFileTypeInfo:现在它返回图标
var icon = RegisteredFileType.ExtractIconFromFile(fileAndParam, false);
return icon;
和控制器
public ActionResult GetFileTypeIcon(string fileName)
{
var photo = PhotoModel.GetFileTypeIcon(fileName);
if (photo == null)
{
return File(Url.Content("~/Content/Images/nofile.png"), "image/png");
}
var stream = new MemoryStream();
photo.ToBitmap().Save(stream, System.Drawing.Imaging.ImageFormat.Png);
var iconStream = new MemoryStream();
Image.FromStream(stream).Save(iconStream, System.Drawing.Imaging.ImageFormat.Bmp);
return File(stream.ToArray(), "image/png");
}
现在,它呈现良好的浏览器,Firefox,Safari和Opera,但在模IE IE没有。
谢谢,这个工程。 –