C# 如何在mvc WebGrid中显示数据库映像(字节[])
我试图在.NET MVC WebGrid列中显示数据库中的字节[]图像。 我正在做以下步骤 (EF模型-关节) (控制员)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
公共列表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)我真是太感谢你了!这就是我需要的,我只是不知道如何从视图中的控制器调用静态方法。再次感谢你!希望这对那里的很多人都有帮助