Программным тип объектаПрограммным тип объекта
C# mvc4 Проект
У меня есть два одинаковых ViewModels, которые содержат более десятка сложных объектов, которые я хочу, чтобы вызвать общий метод из моих создавать и редактировать действия для заполнения ViewModels.
Что-то вдоль линий этого
private void loadMdlDtl(CreateViewModel cvM, EditViewModel evM)
{
If (vM1 != null) { var vM = vM1}
If (vM2 != null) { var vM = vM2}
// about two dozen complex objects need to be populated
vM.property1 = …;
vM.property2 = …;
…
}
Это не работает, потому что vM
не в области.
Есть ли какой-либо способ программно ввести объект vM
, чтобы мне не приходилось создавать два метода loadModel или иным образом дублировать много кода?
РЕШЕНИЕ:
Создание интерфейса:
public interface IViewModels
{
string property1 { get; set; }
int property2 { get; set; }
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
}
имеет вид модель унаследует от интерфейса:
public class CreateViewModel : IViewModels, IValidatableObject
{
string property1 { get; set; }
int property2 { get; set; }
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
{
// implementation
}
}
public class EditViewModel : IViewModels, IValidatableObject
{
string property1 { get; set; }
int property2 { get; set; }
IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
{
// implementation
}
}
Вызова метода из действий проходящих вида модель:
public ActionResult Create()
{
var vM = new CreateViewModel();
...
loadMdlDtl(vM);
...
}
Но теперь принимают интерфейс, а не вид модели в метод:
private void loadMdlDtl(IViewModel vM)
{
// implementation
}
Я считаю, что он должен быть псевдо-C# -кодом. –