Передача данных формы в метод контроллера - дочерние свойства не заполняются - PullRequest
1 голос
/ 11 мая 2011

Мое приложение использует JavascriptMVC на стороне клиента, а ASP MVC в основном функционирует только как служба REST. Вот типичный метод контроллера:

public JsonResult Update(CustomerDto dto)
{
  var repository = Factory.NewCustomerRepository())
  // ... Convert DTO back to entity and save changes
  return Json(dto);
}

Проблема в том, что мой CustomerDTO содержит некоторые свойства, которые не преобразуются из данных формы в объекты, которыми они должны быть. Например, PhoneNumbers:

public class CustomerDto
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public PhoneNumberDto[] PhoneNumbers { get; set; }
    // ... more properties
}
public class PhoneNumberDTO
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string Label { get; set; }
    public string Number { get; set; }
}

В действии контроллера PhoneNumbers будет иметь правильное количество элементов в массиве, но каждый объект будет иметь только нулевые значения / значения по умолчанию. Я подтвердил, что запрос отправляет все соответствующие данные формы:

Id          26
FirstName   A
LastName    Person
MiddleName  Test
PhoneNumbers[0][CustomerID  26
PhoneNumbers[0][Id] 5
PhoneNumbers[0][Label]  Mobile
PhoneNumbers[0][Number] (555)555-5555
PhoneNumbers[1][CustomerID  26
PhoneNumbers[1][Id] 8
PhoneNumbers[1][Label]  Home
PhoneNumbers[1][Number] (654)654-6546

Есть идеи о том, что может происходить? Я просто ошибаюсь, полагая, что MVC3 может автоматически сопоставлять вложенные объекты со значениями формы? Спасибо за любую помощь!

1 Ответ

1 голос
/ 11 мая 2011

На самом деле запрос должен выглядеть следующим образом, если вы хотите, чтобы механизм связывания модели по умолчанию успешно связывал эти значения (обратите внимание PhoneNumbers[0].CustomerID вместо PhoneNumbers[0][CustomerID]):

Id                          26
FirstName                   A
LastName                    Person
MiddleName                  Test
PhoneNumbers[0].CustomerID  26
PhoneNumbers[0].Id          5
PhoneNumbers[0].Label       Mobile
PhoneNumbers[0].Number      (555)555-5555
PhoneNumbers[1].CustomerID  26
PhoneNumbers[1].Id          8
PhoneNumbers[1].Label       Home
PhoneNumbers[1].Number      (654)654-6546

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

В качестве альтернативы вы можете использовать JSON-запросы .

...