开发者

ASP.NET MVC3 bind to subclass

开发者 https://www.devze.com 2023-03-21 22:09 出处:网络
I have a superclass of type 开发者_JAVA技巧Question which has multiple subclasses (e.g. MultipleChoiceQuestion and TextQuestion).Each of the subclasses have their own editor templates (e.g. ~/Shared/E

I have a superclass of type 开发者_JAVA技巧Question which has multiple subclasses (e.g. MultipleChoiceQuestion and TextQuestion). Each of the subclasses have their own editor templates (e.g. ~/Shared/EditorTemplates/MultipleChoiceQuestion.cshtml).

What I would like to do is create a list of Question objects:

class Questionnaire {
    List<Question> Questions;
}

which will really contain instances of the subclasses:

Questions.Add(new MultipleChoiceQuestion());
Questions.Add(new TextQuestion());

I then pass the questionnaire to the View, where I call:

@Html.EditorFor(m => m.Questions)

The view successfully renders the correct editor templates for the specific subclass Question models.

The problem is that when the form is submitted, my Questionnaire model (which contains a list of type Question) contains only instances of Question and not the instances of the subclasses. Furthermore the instances of Question properties are all null.

As a test, I have passed in a list of type MultipleChoiceQuestion and it works fine:

class Questionnaire {
    List<MultipleChoiceQuestion> Questions;
}

Is there any way I can get the HttpPost Action to return my model with the subclasses instantiated with my form data?

Thanks


I think you're running up against a limitation of the DefaultModelBinder. To solve this problem, you need to use a customer model binder.

You might find this post a useful guide; it talks about this specific problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号