MODEL NESTED TYPE IS NULL WHEN AFTER MODELBINDING

Jeet Verma

Total Post:110

Points:776
Posted by  Jeet Verma
 1263  View(s)
Ratings:
Rate this:
Hi Everyone!

I have a ViewModel as below:

public class CheckoutViewModel
{
    public string ProductNumber { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
    public Input UserInput;

    public class Input
    {
        public string Email { get; set; }
        public string Phone { get; set; }
    }
}
And an action like this:

[HttpPost]
public ActionResult Index(CheckoutViewModel model)
{
    // ...
    return View();
}
And my model has bound as below:

@model GameUp.WebUI.ViewModels.CheckoutViewModel

@using (Html.BeginForm("Index", "Checkout", FormMethod.Post))
{
    @Html.AntiForgeryToken()

    <!-- some HTML -->

    @Html.LabelFor(m => m.UserInput.Email)
    @Html.TextBoxFor(m => m.UserInput.Email)

    @Html.LabelFor(model => model.UserInput.Phone)
    @Html.TextBoxFor(model => model.UserInput.Phone)

    <button>Submit</button>
}
When I submit the form, the UserInput is null. I know ASP.NET MVC is able to bind nested types but in this code is not. Also I can get the Email and Phone 

values by:

var email = Request.Form["UserInput.Email"];
var phone = Request.Form["UserInput.Phone"];
Maybe I do something wrong! It's a simple model binding you can find everywhere in the web.

Thanks in advance!

  1. AVADHESH PATEL

    Post:604

    Points:4228
    Re: Model nested type is null when after modelbinding

    Hi Jeet!

    change your properties as from below line of code 

    public class CheckoutViewModel
    {
        public string ProductNumber { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }
        public Input UserInput { get; set; }

        public class Input
        {
            public string Email { get; set; }
            public string Phone { get; set; }
        }
    }

    I hope it resolve your problem

Answer

NEWSLETTER

Enter your email address here always to be updated. We promise not to spam!