В последнее время я слишком много трачу на эту же вещь!
Не видя вашу HTML-форму, я предполагаю, что она просто возвращает результаты выбора из списка с множественным выбором или что-то в этом роде? Если это так, ваша форма просто возвращает набор целых чисел, а не возвращает ваш гидратированный FundAllocations
объект. Если вы хотите сделать это, то в вашем собственном ModelBinder вам нужно будет выполнить свой собственный поиск и увлажнить объект самостоятельно.
Что-то вроде:
fund.FundAllocations =
repository.Where(f =>
controllerContext.HttpContext.Request.Form["FundItem.Catalogue.Id"].Contains(f.Id.ToString());
Конечно, мой LINQ приведен только для примера, и вы, очевидно, можете получить данные в любом случае, если захотите. Между прочим, и я знаю, что это не отвечает на ваш вопрос, но после долгих раздумий я решил, что для сложных объектов лучше использовать ViewModel и привязать ModelBinder по умолчанию к этому, а затем, если мне нужно, гидрировать модель, которая представляет мою сущность. Я столкнулся с рядом проблем, которые сделали этот выбор лучшим, я не буду утомлять вас ими, но с удовольствием экстраполирую, если хотите.
Последний подкаст Herding Code является отличным обсуждением этого вопроса, как и K Скотта Аллена Помещение М в сообщениях блога MVC .