как вы работаете с ajax и связыванием моделей, когда задействованы сложные типы? - PullRequest
1 голос
/ 16 июля 2009

Я хотел бы сохранить привязку модели при выполнении вызовов ajax с моей точки зрения. Я использую jquery ajax для выполнения вызовов, и просто в качестве примера - это мой метод контроллера, который я хочу вызвать из ajax:

public ActionResult Create(Person personToCreate) {
    //Create person here
}

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

Итак, если у меня есть таблица с именем 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 не может обеспечить питомца ...

Так что у меня есть только два варианта (о которых я знаю):

  1. Разрешить myPet быть нулевым в БД

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

т

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

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

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

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

1 Ответ

2 голосов
/ 16 июля 2009

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

...