Контроллер MVC не зависит от типа представления UpdateModel - PullRequest
2 голосов
/ 16 марта 2009

Я хочу использовать updateModel в контроллере, который не имеет уведомления о типе представления. У меня есть разные представления, которые имеют разные типы, но у всех есть класс ExternalBase как унаследованный тип.

Так что в моем контроллере всегда есть ExternalBase, но контроллер не знает правильный тип.

При сохранении я вызываю метод, который получает правильный объект, но возвращает его как externalBase. Внутренний тип - мой правильный тип. Если я наведу курсор мыши на свой объект, это тип представления, который вызывает сохранение. Теперь, если я вызываю updateModel, он не заполняет свойства.

Как пример:

// MyExternalBase - пустой класс

Класс человека

public class Person 
  : MyExternalBase
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<TheParameters> Parameters { get; set; }
    public Address Address { get; set; }

    public TheParameters[] OtherParameters { get; set; }
}
public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public TheParameters Parameter { get; set; }
}
public class TheParameters
{
    public string Parameter { get; set; }
}

В моем контроллере при сохранении я делаю следующее:

        MyExternalBase p = new Person();

        UpdateModel(p, "Person", form.ToValueProvider());

Теперь буква p не заполняется.

Если я вместо этого использую Person p = new Person (), тогда это не проблема. Но я хочу, чтобы мой контроллер не зависел от типа представления.

Это ошибка в updateModel или что-то, что просто невозможно? Или это обходной путь?

Ответы [ 2 ]

6 голосов
/ 24 июня 2010

Если вы используете .NET 4.0, попробуйте использовать:

dynamic p = new Person();
UpdateModel(p);

В этой ситуации UpdateModel будет работать правильно. Я столкнулся с этим и при работе на одном контроллере и увидел, что хочу использовать для нескольких объектов, которые все наследуются от одного типа.

0 голосов
/ 20 февраля 2010

Я тоже хотел бы знать ответ на этот вопрос, у меня есть очень симулированная проблема при использовании передачи базового класса, хотя я могу безопасно понижать до правильного типа со всеми данными в такте.

UpdateModel, похоже, не увидит внутренние свойства, пока я не уменьшу базовый тип до правильного типа, но для этого требуется оператор switch, чтобы получить правильный тип.

...