как вы справляетесь с ajax и привязкой модели, когда задействованы сложные типы?
-
16-09-2019 - |
Вопрос
С моей точки зрения, я хотел бы сохранить привязку модели при выполнении вызовов ajax.я использую jquery ajax для совершения вызовов, и просто в качестве примера — это мой метод контроллера, который я хочу вызвать из ajax:
public ActionResult Create(Person personToCreate) {
//Create person here
}
Как видите, этот метод основан на Привязка модели.Это делает метод намного чище...однако это означает, что когда ajax выполняет вызов, он должен предоставить все переменные, которые не имеют значения NULL в БД.
Итак, если у меня есть таблица под названием Person
который имеет переменные:
firstName varchar(25) not-null
lastName varchar(25) not-null
myPet int not-null <-- This is a foreign key
Затем класс Entity Framework, Person
, созданный будет похож на:
public class Person {
public string firstName { get; set; }
public string lastName { get; set; }
public Pet myPet { get; set; }
}
Поскольку ни одна из переменных не может быть нулевой (как указано в БД), это означает, что вызов ajax должен предоставить string firstName
, string lastName
, Pet myPet
.Но javascript не может предоставить Pet...
Итак, у меня есть только два варианта (насколько я знаю):
Разрешить myPet иметь значение null в БД
Создайте «более плоский» класс, представляющий Person, которому не требуется объект Pet...
то есть:
public class SimplePerson {
public string firstName { get; set; }
public string lastName { get; set; }
public string myPetName { get; set; }
}
Проблема с первым вариантом заключается в том, что модифицировать БД кажется странным...определенно что-то в этом не так, потому что оно позволяет то, чего быть не должно...
Проблема со вторым вариантом заключается в том, что у меня много классов, и кажется, что писать дубликаты классов для каждого из них, чтобы избежать этого, кажется слишком сложным...Если бы у меня было 30 классов, это было бы 30 повторяющихся классов, которые мне пришлось бы создать, чтобы обеспечить привязку модели.
Может ли кто-нибудь придумать лучшие варианты или объяснить, почему один вариант лучше другого?
Решение
Настоящая хитрость здесь заключается в том, чтобы отделить классы модели представления от реальных классов модели.Классы модели представления, как правило, немного проще, и вам необходимо сопоставить их с реальными классами модели, прежде чем делать с ними реальные действия.Однако такие инструменты, как AutoMapper, делают это довольно просто.