Search code examples
asp.net-mvc-3entity-framework-4.1ef-code-firstviewmodelilist

MVC 3 IList<T> Model Properties NULL on POST


I'll let the code do the talking here, I have something like this:

class Problem
{
    public string Title { get; set; }
    public string Description { get; set; }
    public virtual IList<Symptom> Symptoms { get; set; }
}

class Symptom
{
    public string Comments { get; set; }
    public virtual Category Category { get; set; }
}

class Category
{
    public string Name { get; set; }
}

I have a modal that allows users to add a list of symptoms on my view. Each symptom being added produces an INPUT that looks like this (where N is the index):

<input type="text" name="Symptom[N].Name" value="@Model.Symptom[N].Name">
<input type="text" name="Symptom[N].Category" value="@Model.Symptom[N].Category">

Once I POST the data to my controller, the model contains a valid list of Symptom (if I add 3, my Product.Symptom list has 3 entities) and the [Comments] of each symptom has persisted, but the [Category] property of each is NULL. What am I doing wrong here? I've tried numerous things but I still end up with NULL as the [Category] for each.

I'm using Entity Framework 4.1 Code First with Fluent API developing in MVC 3 using Razor syntax.


Solution

  • Try this:

    <input type="text"
        name="Symptom[N].Category.Name"
        value="@Model.Symptom[N].Category.Name">
    

    What I think is happening is that it's trying to bind a string to a Category which is invalid. If you want to map the text to the Name property on the Category class, you will need to specify it one level deeper.