У меня есть такая модель:
return new MyViewModel()
{
Name = "My View Model",
Modules = new IRequireConfig[]
{
new FundraisingModule()
{
Name = "Fundraising Module",
GeneralMessage = "Thanks for fundraising"
},
new DonationModule()
{
Name = "Donation Module",
MinDonationAmount = 50
}
}
};
Интерфейс IRequireConfig предоставляет строковое свойство DataEditor, которое представление использует для передачи в @ Html.EditorFor, например:
@foreach (var module in Model.Modules)
{
<div>
@Html.EditorFor(i => module, @module.DataEditor, @module.DataEditor) //the second @module.DataEditor is used to prefix the editor fields
</div>
}
Когда я отправляю это обратно на мой контроллер, TryUpdateModel оставляет свойство Modules нулевым.Что в значительной степени ожидается, так как я не ожидал, что он узнает, к какому конкретному классу следует десериализоваться.
Поскольку у меня есть оригинальная модель, доступная, когда приходит сообщение, я могу перебрать Модули и получить их Тип, используя .GetType ().Кажется, что на данный момент у меня достаточно информации, чтобы TryUpdateModel попытался десериализовать модель, но проблема в том, что он использует вывод общего типа для управления десериализатором, поэтому он фактически не обновляет ни одно из свойств, кроме тех, которые определены винтерфейс.
Как я могу обновить мой массив модулей с их новыми значениями?
Если какая-то конкретная точка не ясна, пожалуйста, дайте мне знать, и я постараюсь уточнить