我的模型中有一个图像属性,有时候很空。问题是,当数据库中没有图像时,我会argumentNull exception
。如果记录中没有图像,我想要实现的仍然是显示其余属性。
为了达到这个目的,我在我的观点中尝试过这样的事情,但这并不起作用:
<div>
<h4>Company</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ImageData)
</dt>
@if (Model.ImageBase64 != null || Model.ImageData!= null )
{
<dd>
<img src="data:image/png;base64,@Model.ImageBase64" />
</dd>
}
<dt>
@Html.DisplayNameFor(model => model.CompanyName)
</dt>
<dd>
@Html.DisplayFor(model => model.CompanyName)
</dd>
我的模型看起来像这样:
public class Company
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CompanyId { get; set; }
public byte[] ImageData { get; set; }
[NotMapped]
public HttpPostedFileBase UploadImage { get; set; }
[NotMapped]
public string ImageBase64 => System.Convert.ToBase64String(ImageData);
public string CompanyName { get; set; }
public string CompanyAddress { get; set; }
public string CompanyCountry { get; set; }
public string CompanyCity { get; set; }
public string CompanyPostalCode { get; set; }
public string CompanyPhoneNumber { get; set; }
public string CAId { get; set; }
public virtual ICollection<WorkRole> WorkRoles { get; set; }
public virtual ICollection<UserDetails> UserDetails { get; set; }
}
这就是我从控制器传递给视图的内容:
Company company = db.Companies.Where(c => c.CAId == currentUserId)
.FirstOrDefault();
db.Users.FirstOrDefault(x => x.Id == currentUserId);
有关如何实现我想要的任何提示?
答案 0 :(得分:1)
您可以执行null
检查,并确保ImageData
属性在视图中呈现之前有效。
if (@model.ImageData?.Length > 0) { }
您还可以更进一步,修改LINQ
查询以过滤具有有效图片的公司。
db.Companies.Where(c => c.CAId == currentUserId
&& c.ImageBase64 != null
&& c.ImageData?.Length > 0).FirstOrDefault();
作为补充说明,请确保将填充的模型正确传递回视图。
public ActionResult DisplayCompanyImages()
{
var model = // Retrieve db.Companies
return View(model);
}
答案 1 :(得分:1)
如果您使用的是Database First,请打开Model(* .edmx文件),找到表示数据库表的实体类型,右键单击image属性,然后从上下文菜单中选择Properties。在“属性”窗口中,将Nullable从False更改为True。