Frage

Ich möchte Model Bindung halten, wenn Ajax-Aufrufe aus meiner Sicht zu tun. Ich verwende jquery ajax die Anrufe zu machen, und nur als Beispiel- dies ist mein Controller-Methode ich möchte von ajax nennen:

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

Wie Sie sehen können, ist diese Methode setzt auf Modell Die Bindung . Dies macht das Verfahren viel sauberer ... aber dies bedeutet, dass, wenn die Ajax einen Anruf tätigt, muss sie alle Variablen liefern, die in der DB nicht-nullable sind.

Also, wenn ich eine Tabelle namens Person haben, die Variablen hat:

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

Dann Klasse Entity Framework, Person, wäre ähnlich geschaffen:

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

Da keine der Variablen null sein kann (wie in der DB angegeben) bedeutet dies der Ajax-Aufruf ein string firstName, string lastName, Pet myPet liefern muß. Aber Javascript kann das Haustier nicht liefern ...

Also habe ich nur zwei Möglichkeiten (die ich kenne):

  1. Lassen Sie Mypet im DB null sein

  2. Erstellen Sie eine Klasse "flachen", das eine Person darstellt, die nicht das Tier Objekt erfordert ...

ie:

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

Das Problem mit der ersten Option ist, dass es seltsam scheint die DB ... definitiv etwas falsch, darüber zu haben zu ändern, weil es Dinge ist so dass es nicht sein sollte ...

Das Problem mit der zweiten Option ist, dass ich viele Klassen habe und es scheint, umfangreiches doppelte Klassen für jeden zu schreiben gerade dies zu vermeiden ... Wenn ich 30 Klassen habe, dass 30 doppelte Klassen sein würde, dass ich müßte schaffen, um für das Modell zu binden.

zu ermöglichen

Kann mir jemand eine bessere Optionen, oder geben Argumentation auf, warum eine Option wäre besser als das andere?

War es hilfreich?

Lösung

Der eigentliche Trick hier ist Ihre Ansicht Modellklassen von den tatsächlichen Modellklassen zu trennen. Die Ansicht Modellklassen sind in der Regel ein bisschen einfacher zu sein, und Sie müssen sie wieder in Ihre eigentlichen Modellklassen zuordnen, bevor mit ihnen real stuff tun. Tools wie AutoMapper obwohl dieses ziemlich zu einem Kinderspiel machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top