Привязка модели ASP.NET MVC не устанавливает свойства типа, который наследует список <T> - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть ViewModel со свойством коллекции.Я хотел, чтобы у этого типа коллекции, который изначально был List<T>, были дополнительные свойства, поэтому я создал класс, который наследуется от List<T>, и определил свойства для него.Когда я публикую свое действие контроллера, одно из этих свойств (единственное, которое я публикую) не устанавливается, хотя опубликованное имя мне кажется правильным.

Класс списка:

public class ClassEnrollmentPaymentPlanVMList : List<ClassEnrollmentPaymentPlanVM>
{
    public Guid StudentID { get; set; }
    public Guid ClassEventID { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    [Required]
    public Guid SelectedPricePlanID { get; set; }
}

Виртуальная машина, содержащая список (для краткости опущены дополнительные свойства):

public class ClassEnrollmentFormVM
{
    public Guid StudentID { get; set; }

    public Guid ClassEventID { get; set; }

    [Required]
    public DateTime? StartDate { get; set; }

    [Required]
    public DateTime? EndDate { get; set; }

    public ClassEnrollmentPaymentPlanVMList AvailablePaymentPlans { get; set; }
}

Контроллер:

    [HttpPost]
    public ActionResult GetClassPaymentPlans(ClassEnrollmentFormVM vm)
    {
        AjaxResponse response = new AjaxResponse();

        ...

        return response.ToContentResult();
    }

AJAX-запись в GetClassPaymentPlans (извлечено из инструментов Chrome dev.URL расшифрован):

StudentID: 6267cacc-c5c3-41d8-bd77-65bd8be31b7f
ClassEventID: 20d1d0e3-e6fc-4603-b7cc-8373b3d22527
StartDate: 10/3/2018 12:00:00 AM
EndDate: 5/8/2019 12:00:00 AM
AvailablePaymentPlans[0].PricePlanID: 329f138e-cf9b-427c-b944-75304510caa9
AvailablePaymentPlans[0].ScheduledPayments[0].DueDate: 12/27/2018
AvailablePaymentPlans[1].PricePlanID: c3924757-861f-4456-bde5-782ba2759546
AvailablePaymentPlans[1].ScheduledPayments[0].DueDate: 12/27/2018
AvailablePaymentPlans.SelectedPricePlanID: c3924757-861f-4456-bde5-782ba2759546
AvailablePaymentPlans[2].PricePlanID: 64e622f8-6bec-48c7-96b8-faee3fc17832
AvailablePaymentPlans[2].ScheduledPayments[0].DueDate: 12/27/2018
AvailablePaymentPlans[2].ScheduledPayments[1].DueDate: 1/2/2019
AvailablePaymentPlans[2].ScheduledPayments[2].DueDate: 2/2/2019
AvailablePaymentPlans[2].ScheduledPayments[3].DueDate: 3/5/2019
AvailablePaymentPlans[2].ScheduledPayments[4].DueDate: 4/5/2019
AvailablePaymentPlans[2].ScheduledPayments[5].DueDate: 5/6/2019

Но vm.AvailablePaymentPlans.SelectedPricePlanID равно {00000000-0000-0000-0000-000000000000}, когда оно достигает GetClassEnrollmentForm.Сначала я подумал, что, возможно, это не публикация, потому что элементы скрыты, но вы можете видеть выше, что отправляется ключ AvailablePaymentPlans.SelectedPricePlanID, и я вижу в Visual Studio, что Request.Form также включает этот ключ.Видит ли связыватель по умолчанию, что это список, и игнорирует тот факт, что это производный тип?Интересно, что в окне Watch или при наведении курсора на vm Visual Studio также игнорирует дополнительные свойства в AvailablePaymentPlans и не показывает их, но intellisense предлагает их так, как если бы свойство было объявлено в ClassEnrollmentForm в качестве базового класса List<ClassEnrollmentPaymentPlanVM>.Это использует .NET Framework 4.6.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...