mvc.net, как редактировать вложенные классы модели представления

У меня есть следующий вложенный класс модели представления...

public class CustomerModel
{
  public string name;
  public Address mailingAddress;
  public Address billingAddress;
}

public class Address
{
  public string line1;
  public string city;
  public string country;
}

Я надеялся, что есть какой-то автоматизированный способ создания страницы редактирования, но все, что я пробовал и читал, указывает на то, что фреймворк и генерация кода обрабатывают только свойства верхнего уровня в вашей модели представления. Свойство «имя» — единственное, сгенерированное в представлении и в действии, это только свойство «имя», которое заполняется адресами, остающимися нулевыми.

[HttpPost]
public ActionResult Edit(CustomerModel model)

однако, если я вручную добавлю поля ввода для адреса (через частичные представления) и переключусь на подпись FormCollection для действия, я получу соответствующие значения адреса, введенные на экране.

есть ли какое-либо простое решение для этого, кроме создания моей собственной функции для преобразования из FormCollection в CustomerModel?


person yamspog    schedule 14.09.2010    source источник


Ответы (1)


Не могли бы вы использовать шаблон редактора здесь? По сути, вы создаете строго типизированное частичное представление (в вашем случае это тип Address), сохраняете его в определенной папке (/Views/Shared/EditorTemplates), и всякий раз, когда редактор отображается для члена этого типа данных, частичное представление вместо этого автоматически отображается. Таким образом, вызов Html.EditorFor(model => model.mailingAddress) вместо этого отображает частичное представление.

Я думаю, что первое место, где я прочитал об этом, было, когда я искал какую-то проверку DateTime. Ознакомьтесь с это ссылка, и, возможно, в вашем частичном представлении будет несколько Html.EditorFor(model => model.line1) и Html.EditorFor(model => model.city)

Это не делает все суперавтоматическим, но помогает в будущем редактировать типы данных, такие как Address.

person David Fox    schedule 15.09.2010