3

Я хочу список различных (производные) типов объектов, работающих с ModelBinder По умолчанию в ASP.NET MVC 2.MVC2 ModelBinder для Списка производных объектов

У меня есть следующие ViewModel:

public class ItemFormModel 
    {  
     [Required(ErrorMessage = "Required Field")] 
     public string Name { get; set; } 
     public string Description { get; set; } 

     [ScaffoldColumn(true)] 
     //public List<Core.Object> Objects { get; set; }  
     public ArrayList Objects { get; set; }     
    } 

И список содержит объекты с разными производными типами, например

public class TextObject : Core.Object 
    { 
     public string Text { get; set; } 
    } 

    public class BoolObject : Core.Object 
    { 
     public bool Value { get; set; } 
    } 

Это не имеет значения, если я использую список или реализацию ArrayList, все получают хорошо scaffolded-й в форме, но ModelBinder не решает свойства производного типа объекта для меня, отправляя обратно в ActionResult ,

Что может быть хорошим решением для структуры Viewmodel для получения списка различных типов объектов? Наличие дополнительного списка для каждого типа объекта (например, List, List и т. Д.), По-видимому, не является хорошим решением для меня, так как это связано с большими накладными расходами как при создании модели, так и при отображении ее обратно в модель домена.

Думая о другом подходе к связыванию всех свойств в привязке к настраиваемой модели, как я могу использовать подход аннотаций данных здесь (проверка необходимых атрибутов и т. Д.) Без большого количества накладных расходов?

ответ

4

Проверьте Derived Type ModelBinder in MvcContrib. Это позволяет вам привязывать к производным типам процесс «typestamping» - который обрабатывается автоматически для вас при использовании помощника RenderTypedPartial (...). Частичные части MvcContrib поддерживают состояние привязки через частичные, поэтому префиксы Name/Id должным образом поддерживаются на графе глубоких объектов. Если вы используете другие механизмы, такие как шаблоны, тогда вам нужно будет обрабатывать typestamping самостоятельно. Это объясняется на странице документации.

Возвращаясь к вашим вопросам и о том, как производные типы разрешены с помощью ModelBinder, вы можете зарегистрировать изменения производного типа с атрибутами в механизме, подобном WCF KnownTypeAttribute, или вы можете сделать регистрацию при запуске. В любом случае, эти варианты регистрируются один раз и учитываются для соображений производительности.

Модель связующего также решает эту проблему таким образом, чтобы не мешать атрибутам аннотации/проверки данных. Они будут работать так, как вы ожидаете их в любом другом сценарии.

+0

В настоящее время недоступно для MVC 4+ –

 Смежные вопросы

  • Нет связанных вопросов^_^