Question

Je voudrais garder modèle de liaison lorsque vous faites des appels ajax de mon point de vue. J'utilise jquery ajax pour faire les appels, et tout comme un exemple- c'est ma méthode de commande Je veux appeler à partir ajax:

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

Comme vous pouvez le voir, cette méthode se fonde sur Modèle Reliure . Cela rend la méthode beaucoup plus propre ... Cependant, cela signifie que lorsque le ajax fait un appel, il doit fournir toutes les variables qui ne sont pas annulable dans le DB.

Alors, 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 classe Entity Framework, Person, créé serait similaire à:

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

Comme aucune des variables peut être nulle (comme spécifié dans le DB) cela signifie que l'appel Ajax doit fournir un string firstName, string lastName, Pet myPet. Mais javascript ne peut pas fournir le Pet ...

Je n'ai deux options (que je connais):

  1. Laisser mypet soit nul dans le DB

  2. Créer une classe « flattent » qui représente une personne qui ne nécessite pas l'objet animal ...

-à-dire:

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

Le problème avec la première option est qu'il semble étrange d'avoir à modifier la DB ... certainement quelque chose de mal à ce sujet parce que ça permet des choses qu'il ne devrait pas être ...

Le problème avec la deuxième option est que j'ai beaucoup de classes et il semble vaste d'écrire des classes en double pour chacun juste pour éviter cela ... Si j'avais 30 cours, ce serait 30 des classes en double que je devrait créer afin de permettre la liaison modèle.

Quelqu'un peut-il imaginer de meilleures options ou donner raisonnement pourquoi une option serait mieux que l'autre?

Était-ce utile?

La solution

La vraie astuce ici est de séparer votre point de vue des classes de modèle à partir des classes de modèles réels. Les classes de modèle de vue ont tendance à être un peu plus simple, et vous devez les associer de nouveau dans vos classes de modèles réels avant de faire des choses réelles avec eux. Des outils tels que AutoMapper font à peu près un jeu d'enfant si.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top