Frage

Ich habe eine Warenkorb-Anwendung auf Monorail läuft und mit Schloss Activerecord / NHibernate, und es gibt einen ShoppingCart Tisch und eine ShoppingCartItems Tabelle, die Einheiten zugeordnet werden.

Hier ist das Szenario: ein Benutzer fügt die Dinge in den Warenkorb gelegt, sagen 5 Stück, und geht um den Wagen zu sehen. Der Warenkorb zeigt alle 5 Elemente. der Benutzer dupliziert die Tab / Fenster und bekommt eine andere Registerkarte aus dem gleichen Wagen (nennen wir es Tab B). nimmt der Benutzer aus dem Warenkorb ein Element, so jetzt gibt 4 Elemente in Register B sind, aber in der ursprünglichen Registerkarte A, gibt es noch 5 Stück. der Benutzer geht auf die Registerkarte A zurück und aktualisiert etwas in den Warenkorb gelegt und klickt auf die Schaltfläche „Aktualisieren“, die die Änderungen einreicht. meine Monorail Aktion versucht, einen ARDataBind auf ShoppingCartItems unter Verwendung der Daten aus der Sicht zu tun, die alle fünf Elemente enthält. wenn es um den Artikel erhält, dass der Benutzer aus dem Reiter B gelöscht, wirft sie ein für das Element „Keine Zeile mit dem gegebenen Identifikator vorhanden“.

ich kann nicht herausfinden, ob es einen Weg gibt es binden nicht, dass Zeile return null, neue Instanz zurückgeben, usw.? gibt es einen AutoLoadBehavior Parameter auf dem ARDataBind Attribute, aber das scheint nur Belastung der Kindereinheiten betreffen, und nicht die Root-Entität. die unabhängig von Option, die ich wähle, bekomme ich die Ausnahme, bevor die Steuerung auch die Methode Aktion tritt (außer AutoLoadBehavior.Never, aber das hat mir wirklich nicht helfen).

statt, ich habe Code, dass Anrufe Request.ObtainParamsNode (), um die Form Knoten zu ziehen und analysieren sie manuell in Objekte und ignoriert die, die nicht mehr existieren. Gibt es einen besseren Weg?

Dank.

War es hilfreich?

Lösung

ARDataBinder gekröpft FindByPrimaryKey(Type targetType, object id):

protected override object FindByPrimaryKey(Type targetType, object id) {
  return FindByPrimaryKey(targetType, id, false);
}

Der Schlüssel hier ist die false Parameter, die es null macht zurückkehren statt Werfen.

Dann erben ARDataBindAttribute , überschreiben die CreateBinder () -Methode und machen es anstelle des Standard-ARDataBinder Ihr neues Bindemittel zurück.

Dann bewerben Sie Ihren kundenspezifischen Bindemittel Attribut statt ARDataBindAttribute.

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