Search code examples
c#asp.net-coreentity-framework-coreasp.net-core-webapiviewmodel

Why is my viewModel object returning null?


I have 2 classes, Message and User and I have created a viewModel that contains both these classes:

public class User
{
    [Key]
    public int UserId { get; set; }

    public string Username { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public ICollection<Message>? Messages { get; set; } = new Collection<Message>();

}

public class Message
{
    [Key]
    public int MessageId { get; set; }

    public string MessageContent { get; set; }

    public DateTime DateCreated { get; set; }
}

public class NewMessageViewModel
{
    public Message Message { get; set; }

    public User? Sender { get; set; }

    public User? Receiver { get; set; }
}

However when I try to pass the viewModel througha controller and get back some json it has an error of 'System.NullReferenceException: 'Object reference not set to an instance of an object.'

Im not passing through something correctly, that I know but for the live of me I can see what is wrong! I'm too close for objectivity so could someone point out the dumb mistake i've made?

my controller action:

    [Route("NewMessageViewModel")]
    [HttpGet]
    public NewMessageViewModel GetNewMessageViewModel()
    {

        NewMessageViewModel newmv = new NewMessageViewModel
        {
            Message = { MessageContent = "HelloWord", MessageId = 1, DateCreated = DateTime.Now},
            Receiver = { UserId = 1, Messages = null, FirstName = "Andy", LastName = "Stav", Username = "AndyStav" },
            Sender = { UserId = 2, Messages = null, FirstName = "Test", LastName = "Test", Username = "Test" }

        };

        return newmv;

    }

Solution

  • you forgot to initialize message and user class:

            NewMessageViewModel newmv = new NewMessageViewModel
            {
                Message = new Message { MessageContent = "HelloWord", MessageId = 1, DateCreated = DateTime.Now },
                Receiver = new User { UserId = 1, Messages = null, FirstName = "Andy", LastName = "Stav", Username = "AndyStav" },
                Sender = new User { UserId = 2, Messages = null, FirstName = "Test", LastName = "Test", Username = "Test" }
    
            };
    
            return newmv;
    

    Output:enter image description here