Массив привязки моделей в MVC 3 - PullRequest
0 голосов
/ 09 февраля 2012

Я ищу способ добиться следующего в MVC 3.

Допустим, у меня есть страница с одним вопросом.В сообщении я хотел бы привязать следующую ViewModel:

public class QuestionElementViewModel
{
    public int QuestionId { get; set; }
    public string Name { get ; set; }
    public string Question { get; set; }
    public string Feedback { get; set; }
}

Это легко сделать следующим образом (если я использую правильные имена в представлении):

[HttpPost]
public ActionResult Index(QuestionElementViewModel pm)
{
    //Do something
}

Теперь у меня есть несколько вопросов на моей странице.Используя описанную здесь технику: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx Я также могу сделать это довольно просто:

[HttpPost]
public ActionResult Index(QuestionElementViewModel[] pm)
{
    //Do Something
}

Но допустим, у меня есть не только вопросы, но и разные элементы на моей странице, и эти элементы могутварьироваться.Возможно ли каким-то образом добиться чего-то подобного:

[HttpPost]
public ActionResult Index(IElementViewModel[] pm)
{
    //Do Something
}

, где автоматически привязывается каждый ViewModel, реализующий этот интерфейс?

Я пробовал этот код, и он выдает ошибку: не удается создать экземпляр интерфейса, что звучит довольно очевидно.

Я думаю, мне следует создать пользовательский механизм связывания моделей, но я не очень знаком с этим и не хочу слишком сильно отходить от стандартной MVC-инфраструктуры ..

1 Ответ

1 голос
/ 09 февраля 2012

Для этого сценария вам понадобится пользовательское связующее для модели, поскольку вы используете интерфейс, а связующее для модели по умолчанию не будет знать, какую реализацию создать.Поэтому одним из возможных методов является использование скрытого поля, содержащего конкретный тип для каждого элемента.Вот пример , который может поставить вас на правильный путь.

...