2017-02-11 83 views
1

我在我的模型中有一個圖像屬性,它有時很空。問題是,當數據庫中沒有圖像時,我輸入argumentNull exception。如果記錄中沒有圖像,我想要實現的仍然是顯示其餘的屬性。如何在不修改數據庫的情況下繞過argumentNull異常?

爲宗旨我試圖做這樣的事情在我看來,沒有工作:

<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

您是否將模型返回到視圖 - 您顯示的代碼可能會引發異常的唯一方式是'Model'爲'null' –

+0

是的,我正在返回一個模型。 –

+0

然後你沒有向我們展示真正拋出異常的代碼。 '@if(Model.ImageBase64!= null || Model.ImageData!= null)'甚至不需要 –

回答

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); 
} 
+0

異常不是因爲'ImageBase64'是'null' - 它是因爲'Model'是'null' –

+0

感謝您的回答。我試過了,但它給了我以下例外:LINQ to Entities不能識別方法'布爾IsNullOrWhiteSpace(System.String)'方法,並且此方法不能轉換爲存儲表達式。 –

+0

@RobertRoss - 我已經修改了我的答案,以顯示LINQ to Entities替換爲'.IsNullOfWhiteSpace' –

1

如果您使用的是數據庫首先,打開你的模型(* .edmx文件),找到代表數據庫表中的實體類型,在圖像屬性右鍵單擊,然後從上下文菜單中選擇屬性。在屬性窗口中,將Nullable從False更改爲True。

相關問題