Модель, связывающая две или более коллекции - PullRequest
3 голосов
/ 11 декабря 2010

Кто-нибудь имел модель удачи, связывающую две или более коллекции, используя код, опубликованный Филом Хааком здесь: Привязка модели к списку ?

В качестве примера, у меня есть следующий код.

public class Book {
  public string Name { get; set; }
}
public class Author {
  public string Name { get; set; }
}


public ActionResult Index(List<Book> books, List<Author> authors) {
  // Will never model bind two collections.
}

HTML-код, который у меня есть:

<input type="hidden" name="books.index" value="1" />
<input type="text" name="books[1].Name" />

<input type="hidden" name="books.index" value="2" />
<input type="text" name="books[2].Name" />

<input type="hidden" name="authors.index" value="1" />
<input type="text" name="authors[1].Name" />

<input type="hidden" name="authors.index" value="1" />
<input type="text" name="authors[1].Name" />

Исключение, которое я получаю:

Словарь параметров содержит недопустимую запись дляпараметр «авторы» для метода «System.Web.Mvc.ActionResult Index (System.Collections.Generic.List 1[Book], System.Collections.Generic.List 1 [Author])» в «HomeController».Словарь содержит значение типа 'System.Collections.Generic.List 1[Book]', but the parameter requires a value of type 'System.Collections.Generic.List 1 [Author]'.Имя параметра: параметры

Я что-то не так делаю или ASP.NET MVC не поддерживается?

1 Ответ

3 голосов
/ 12 декабря 2010

Ваша проблема в другом месте, я не смог воспроизвести.Следующее прекрасно работает для меня:

Модель:

public class Book
{
    public string Name { get; set; }
}
public class Author
{
    public string Name { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(List<Book> books, List<Author> authors)
    {
        return View();
    }
}

Вид:

<% using (Html.BeginForm()) { %>
    <input type="text" name="books[0].Name" value="book 1" />
    <input type="text" name="books[1].Name" value="book 2" />

    <input type="text" name="authors[0].Name" value="author 1" />
    <input type="text" name="authors[1].Name" value="author 2" />

    <input type="submit" value="OK" />
<% } %>

Он успешно связывает значенияобратно в действие POST.


ОБНОВЛЕНИЕ:

Я подтверждаю, что это ошибка в ASP.NET MVC 3 RC2 , которая будет исправлена ​​в окончательной первоначальной версии,В качестве обходного пути вы можете добавить следующее в Application_Start:

ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...