2015-01-21 5 views
0

У меня есть следующие классы:Модели связывание с наследуемым классом

public abstract class InputVariableVm 
{ 
    public InputVariableVmType Type { get; set; } 
} 



[KnownType(typeof(BoolInputVariableVm))] 
public class BoolInputVariableVm : InputVariableVm 
{ 
    public bool Value { get; set; } 

    public BoolInputVariableVm(string name, bool value) 
    { 
     Value = value; 
     Type = InputVariableVmType.Bool; 
    } 
} 

[KnownType(typeof(StringInputVariableVm))] 
public class StringInputVariableVm : InputVariableVm 
{ 
    public string Value { get; set; } 

    public StringInputVariableVm(string name, string value) 
    { 
     Value = value; 
     Type = InputVariableVmType.String; 
    } 
} 

В моем контроллере Web API, я пытаюсь привязать к объекту InputVariableVm (строка или Bool).

Однако объект всегда имеет значение null - но когда я удаляю «абстрактное» ключевое слово из базового класса, он вставляет базовый класс (но без конкретной реализации, поэтому отсутствует свойство Value).

Что может быть причиной этого?

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

ответ

1

Это просто, как работает модель по умолчанию Связыватель - типа вы положили в качестве параметра действия типа связующего будет пытаться создать экземпляр, он не имеет ни малейшего представления о том, что на самом деле вы хотите полученного типа инстанцированного за кулисами. FWIW причина, по которой это null в первом сценарии, заключается в том, что вы не можете создать класс abstract, поэтому его следует удалить.

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

К сожалению, нет никакого способа обойти это - вам понадобится специальная вяжущая модель.

+0

Я вижу. Спасибо за ответ, хотя :) – JensOlsen112

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