C# 如何在mvc WebGrid中显示数据库映像(字节[])

C# 如何在mvc WebGrid中显示数据库映像(字节[]),c#,sql-server,asp.net-mvc,webgrid,C#,Sql Server,Asp.net Mvc,Webgrid,我试图在.NET MVC WebGrid列中显示数据库中的字节[]图像。 我正在做以下步骤 (EF模型-关节) (控制员) 公共列表cargarArticulos(字符串搜索、字符串排序、字符串排序、int skip、int pageSize、out int totalRecord) { 使用(DbModel db=new DbModel()) { var v=(从一个以db.articulos为单位的 哪里 a、 tipo_Pro.Contains(搜索)|| a、 nombre_Pro.Co

我试图在.NET MVC WebGrid列中显示数据库中的字节[]图像。 我正在做以下步骤

(EF模型-关节)

(控制员)

公共列表cargarArticulos(字符串搜索、字符串排序、字符串排序、int skip、int pageSize、out int totalRecord)
{
使用(DbModel db=new DbModel())
{
var v=(从一个以db.articulos为单位的
哪里
a、 tipo_Pro.Contains(搜索)||
a、 nombre_Pro.Contains(搜索)||
a、 描述专业包含(搜索)
选择一个
);
totalRecord=v.Count();
v=v.OrderBy(排序+“”+sortdir);
如果(页面大小>0)
{
v=v.Skip(Skip).Take(pageSize);
}
return v.ToList();
}
}
(视图)


@表格(
tableStyle:“表响应表边界”,
标题样式:“webgrid标题”,
页脚样式:“webgrid页脚”,
交替行样式:“webgrid交替行”,
行样式:“webgrid行样式”,
列:grid.columns(
grid.Column(columnName:“imagen_Pro”,标题:“imagen”,格式:),
grid.Column(columnName:“tipo_Pro”,header:“tipo”),
grid.Column(columnName:“nombre_Pro”,标题:“nombre”),
grid.Column(columnName:“Description_Pro”,标题:“Description”),
grid.Column(columnName:“precio_Pro”,标题:“precio”),
grid.Column(标题):⇨", 格式:(item)=>Html.ActionLink(“Ver”,“Ver”,new{}))
)
)
其他一切都很好,我成功地从控制器检索列表,它显示在Webgrid中,唯一的问题是显示字节[]图像存储在我的数据库中,我不知道如何将其转换为base64,然后再显示在webgrid中,或者只是在列中添加righ格式。我已经为此工作了几个小时,请帮助

grid.Column(columnName:“imagen_Pro”,标题:“imagen”,格式:)


下面是一种将字节数组转换为Base64并将Base64字符串嵌入网格中img标记的方法。您应该能够向控制器添加静态方法,如下所示:

public static String ConvertByteArrayToBase64(int id)
{
    using (var db = new DBModel())
    {
        return Convert.ToBase64String(db.Articulos.Where(c => c.id_Art == id).First().imagen_Pro);
    }
}
columns: grid.Columns
(
    grid.Column(header: "IMAGEN", format: @<img src="data:image/jpeg;base64,@YourController.ConvertByteArrayToBase64(@item.id_Art)" alt="">))
)
然后添加如下列:

public static String ConvertByteArrayToBase64(int id)
{
    using (var db = new DBModel())
    {
        return Convert.ToBase64String(db.Articulos.Where(c => c.id_Art == id).First().imagen_Pro);
    }
}
columns: grid.Columns
(
    grid.Column(header: "IMAGEN", format: @<img src="data:image/jpeg;base64,@YourController.ConvertByteArrayToBase64(@item.id_Art)" alt="">))
)
columns:grid.columns
(
网格列(标题:“图像”,格式:@))
)
如果是png或gif,请分别用image/png或image/gif替换image/jpeg。

我有类似的任务, 但就我而言,我采用了一种非常直截了当的方法:

grid.Column(format:<img src="/ProductPricing/SetImageThrough?@item.UId" alt="Sample" height="50" width="70" /></text>, header: "PRODUCTIMAGE"),
控制器

添加以下将从数据库中搜索和获取图像的方法:

public ActionResult SetImageThrough(int id)
    {
        var fileById = (from fi in _db.InvMasters
                        where fi.UId== id
                        select new {fi.SampleAttach }).ToList().FirstOrDefault();
        return File(fileById.SampleAttach, "image/jpg");
    }
查看页面

添加使用以下方法的选项:

grid.Column(format:<img src="/ProductPricing/SetImageThrough?@item.UId" alt="Sample" height="50" width="70" /></text>, header: "PRODUCTIMAGE"),
grid.Column(格式:,标题:“PRODUCTIMAGE”),
希望这将帮助您显示您的图片。 如果使用不同的扩展名,则只能将以下内容(“image/jpg”)更改为.png


快乐编码!!!!

首先非常感谢您,我也认为您的解决方案正是我所需要的,唯一的问题是当我键入控制器名称(ArticuloController)时在本部分@->YourControllerTry使用名称空间限定名称。这是一个静态方法,因此不需要控制器实例,只需要namespace.class name。在我的示例中,它如下所示:@WebApplication1.Controllers.imageTableController.ConvertByteArrayToBase64(@item.id)我真是太感谢你了!这就是我需要的,我只是不知道如何从视图中的控制器调用静态方法。再次感谢你!希望这对那里的很多人都有帮助