Search code examples
c#entity-frameworkasp.net-mvc-4razor

How to check model string property for null in a razor view


I am working on an ASP.NET MVC 4 application. I use EF 5 with code first and in one of my entities I have :

public string ImageName { get; set; }
public string ImageGUIDName { get; set; }

those two properties which are part of my entity. Since I may not have image uploaded these values can be null but when I render the view passing the model with ImageName and ImageGUIDName coming as null from the database I get this :

Exception Details: System.ArgumentNullException: Value cannot be null.

The basic idea is to provide different text for the user based on the fact if there is picture or not:

            @if (Model.ImageName != null)
            {
                <label for="Image">Change picture</label>
            }
            else
            { 
                <label for="Image">Add picture</label>
            }

So when the above code got me that error I tried with string.IsNullOrEmpty(Model.ImageName) and also Model.ImageName.DefaultIfEmpty() != null but I got the exact same error. It seems that I can not just set y entity property as nullable:

public string? ImageName { get; set; } //Not working as it seems

So how can I deal with this?


Solution

  • Try both Model != null and !String.IsNullOrEmpty(Model.ImageName) first, as you may be passing not only a Null value from the Model but also a Null Model:

    @if (Model != null && !String.IsNullOrEmpty(Model.ImageName))
    {
        <label for="Image">Change picture</label>
    }
    else
    { 
        <label for="Image">Add picture</label>
    }
    

    Otherwise, you can make it even neater with some ternary fun! - but that will still error if your model is Null.

    <label for="Image">@(String.IsNullOrEmpty(Model.ImageName) ? "Add" : "Change") picture</label>