как вы справляетесь с ajax и привязкой модели, когда задействованы сложные типы?

StackOverflow https://stackoverflow.com/questions/1138115

Вопрос

С моей точки зрения, я хотел бы сохранить привязку модели при выполнении вызовов 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...

Итак, у меня есть только два варианта (насколько я знаю):

  1. Разрешить myPet иметь значение null в БД

  2. Создайте «более плоский» класс, представляющий Person, которому не требуется объект Pet...

то есть:

public class SimplePerson {
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string myPetName { get; set; }
}

Проблема с первым вариантом заключается в том, что модифицировать БД кажется странным...определенно что-то в этом не так, потому что оно позволяет то, чего быть не должно...

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

Может ли кто-нибудь придумать лучшие варианты или объяснить, почему один вариант лучше другого?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top