2010-12-15 14 views
0

Ich habe eine Ansicht, die RenderAction verwendet, um eine andere Ansicht zu rendern - es funktionierte alles gut, aber ich machte ein einigermaßen kleines Refactoring und bewegte einige meiner Modelleigenschaften in eine abstrakte Basisklasse (die mein Modell erbt).Modellobjekt wird erneut instanziiert. Möglicherweise von IoC?

Html.RenderAction("MyAction","MyController", Model); 

Wenn ich hier einen Haltepunkt setzen, kann ich meine Modellobjekt voll bestückt, jedoch sehen, wenn Schritt weiter in sie mein Modell scheint neu instanziiert zu werden - mit allen Eigenschaften nicht gesetzt ist und daher ein erhalte ich Viele Null-Referenz-Ausnahmen.

RenderAction bewirkt, dass mein IoC-Container (Castle Windsor) eine neue Instanz von MyController instanziiert. Wird mein Model-Objekt aus irgendeinem Grund instanziiert?

Um die Dinge noch komplizierter zu machen, wenn VS mir meine Ausnahme zeigt, sagt es im Wesentlichen "Eigenschaft X ist Null", aber wenn ich auf QuickWatch die Eigenschaft sehe, ist es nicht Null.

Ich dachte, ich könnte abstrakte Klassen falsch verstanden haben, aber wenn ich die Basis in eine normale Klasse ändere, bekomme ich das gleiche Ergebnis.

Ich benutze ASP.NET MVC 1.0.

Edit:

Auch MyAction ein Action gibt - wenn das einen Unterschied macht.

+0

@Mauricio - ich bin nicht. Ich konfiguriere mit XML - es ist ziemlich Standard und es funktioniert für viele andere Abhängigkeiten (alle Schnittstellen, keine Abstracts). – diarmo

+1

Das sieht nach einem Missverständnis von RenderAction aus. –

+0

Und nein, Windsor wird Dinge nicht instanziieren, die Sie nicht registriert haben. –

Antwort

1

Der Objektparameter von RenderAction bezieht sich auf Routenwerte, nicht auf das Modell. Sie müssen das Modell in der MyAction-Methode selbst erstellen.

+0

danke. Ich wusste, dass es etwas Dummes war. Lustig genug, passiere das Modell, das benutzt wurde, um zu arbeiten - ich gehe besser durch den Rest des Codes - stelle sicher, dass das nicht überall ist! – diarmo

Verwandte Themen