Comment allez-vous traiter avec Ajax et Model Binding lorsque des types complexes sont impliqués?

Je voudrais garder la binding de model en faisant des appels d'ajax de ma vue. J'utilise jquery ajax pour faire les appels, et juste à titre d'exemple – c'est ma méthode de controller que je veux appeler depuis ajax:

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

Comme vous pouvez le voir, cette méthode s'appuie sur la binding de model . Cela rend la méthode beaucoup plus propre … cependant, cela signifie que lorsque l'ajax fait un appel, il doit fournir toutes les variables qui ne sont pas valables dans la database.

Donc, si j'ai une table appelée Person qui a des variables:

 firstName varchar(25) not-null lastName varchar(25) not-null myPet int not-null <-- This is a foreign key 

Ensuite, la class Entity Framework, Person , créée serait similaire à:

 public class Person { public ssortingng firstName { get; set; } public ssortingng lastName { get; set; } public Pet myPet { get; set; } } 

Comme aucune des variables ne peut être nulle (comme spécifié dans la database), cela signifie que l'appel ajax doit fournir une ssortingng firstName , ssortingng lastName , Pet myPet . Mais javascript ne peut pas fournir le Pet …

Donc, je n'ai que deux options (que je connais):

  1. Autoriser myPet à être nul dans la database

  2. Créer une class "flatter" qui représente une personne qui n'a pas besoin de l'object animal de compagnie …

c'est à dire:

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

Le problème avec la première option est qu'il semble étrange d'avoir à modifier la database … certainement quelque chose de mal à ce sujet, car il permet des choses qu'il ne devrait pas être …

Le problème avec la deuxième option est que j'ai beaucoup de classs et il semble extensif d'écrire des classs en double pour chacune d'entre elles juste pour éviter cela … Si j'avais 30 classs, ce serait 30 classs en double que je devrais créer afin de permettre la binding du model.

Quelqu'un peut-il penser à de meilleures options, ou donner un raisonnement sur pourquoi une option serait meilleure que l'autre?

Le vrai truc ici est de séparer vos classs de templates d'affichage des classs de templates réelles. Les classs de templates de vue ont tendance à être un peu plus simples et vous devez les recréer dans vos classs de templates réelles avant de faire de véritables choses avec elles. Des outils tels qu'AutoMapper en font un jeu d'enfant.