Ich habe die Klassen Parent Model und ViewModel. Parent Model-Klasse hat GetViewModel() -Methode, und ich versuche, Parent-Klasse zu erben und GetViewModel() in Child-Klasse zu überschreiben. Es wird jedoch eine unendliche Ausnahme ausgelöst.Überschreiben der Klassenmethode "ParentModel" in der Klasse "Child"
Elternteil Ansichtsmodell Klasse:
public class ParentViewModel
{
public IEnumerable<string> Choices { get; set; }
public object Value { get; set; }
public IMetaField MetaField { get; set; }
public bool IsRequired { get; set; }
public bool HasOtherChoice { get; set; }
public string ValidationAttributes { get; set; }
public string RequiredViolationMessage { get; set; }
public string CssClass { get; set; }
}
Eltern Model-Klasse:
public class ChildModel : ParentModel
{
public string CorticonEntityName { get; set; }
public string CorticonFieldName { get; set; }
public override object GetViewModel(object value, IMetaField metaField)
{
this.Value = value;
return (object)new ChildViewModel()
{
Choices = this.DeserializeChoices(),
Value = value,
MetaField = this.MetaField,
HasOtherChoice = this.HasOtherChoice,
IsRequired = (this.ValidatorDefinition.Required.HasValue && this.ValidatorDefinition.Required.Value),
ValidationAttributes = this.BuildValidationAttributesString(),
RequiredViolationMessage = this.ValidatorDefinition.RequiredViolationMessage,
CssClass = this.CssClass
};
}
}
ich zwei Kind-Klassen ChildModel Klasse und ChildViewModel classs erstellt haben, die Eltern Lasses erben.
Ich möchte die GetViewModel() der Elternklasse überschreiben, also habe ich getan, wie unten und funktioniert perfekt.
ChildViewModel Klasse:
public class ChildViewModel:ParentViewModel
{
public string CorticonEntityName { get; set; }
public string CorticonFieldName { get; set; }
}
ChildModel Klasse:
public class ChildModel : ParentModel
{
public string CorticonEntityName { get; set; }
public string CorticonFieldName { get; set; }
public override object GetViewModel(object value, IMetaField metaField)
{
this.Value = value;
return (object)new ChildViewModel()
{
Choices = this.DeserializeChoices(),
Value = value,
MetaField = this.MetaField,
HasOtherChoice = this.HasOtherChoice,
IsRequired = (this.ValidatorDefinition.Required.HasValue && this.ValidatorDefinition.Required.Value),
ValidationAttributes = this.BuildValidationAttributesString(),
RequiredViolationMessage = this.ValidatorDefinition.RequiredViolationMessage,
CssClass = this.CssClass,
CorticonEntityName=this.CorticonEntityName,
CorticonFieldName=this.CorticonFieldName
};
}
}
Aber ich nicht‘wollen setzen alle Eigenschaften in der Kinderklasse GetViewModel() erneut als Mutter GetViewModel() macht. Ich wollte die Eltern-Klasse-Methode wieder verwenden und neue Eigenschaften in der Child-Klasse festlegen, also habe ich versucht, wie unten, aber es wird Endlosschleife geworfen.
ChildViewModel Klasse:
public class ChildViewModel:ParentViewModel
{
public string CorticonEntityName { get; set; }
public string CorticonFieldName { get; set; }
CheckboxesFieldViewModel baseObject { get; set; }
}
ChildModel Klasse:
public class ChildModel : ParentModel
{
public string CorticonEntityName { get; set; }
public string CorticonFieldName { get; set; }
CheckboxesFieldViewModel baseObject { get; set; }
public override object GetViewModel(object value, IMetaField metaField)
{
object objBase=this.GetViewModel(value,metaField);
return (object)new ChildViewModel()
{
objParent=objBase,
CorticonEntityName = this.CorticonEntityName,
CorticonFieldName = this.CorticonFieldName
};
}
}
Wie der übergeordneten Klasse GetViewModel wieder verwenden können() ohne wieder die Eigenschaften einstellen.
KooKzip, Dank funktioniert perfekt, aber ich habe eine kleine Frage. Der Weg, den ich gemacht habe, ist richtig? –
@Balu Nicht wirklich, Sie brechen das MVC-Muster. Das Viewmodel kann auf das Modell verweisen, nicht umgekehrt –
Ich habe die Komposition so verwendet, wie ich sie von der Parent-Klasse geerbt habe. –