2010-11-07 3 views
5

Ich bin ein komplexes Objekt wie ein Model auf die View alsComplex Objekt von View Vorbei an Controller: Ein Objekt ist immer null

alt text

aber wenn ich aus der Sicht des Modells zurück vorbei, ein bestimmtes Objekt kommt immer null während andere komplexe Typen normalerweise durch

alt text geben werden

meine Ansicht ist der Standard Edit Stark Ansicht typisierten

alt text

Was ich bin fehlt?

Die Model Fehler sagen

Der Parameter Konvertierung vom Typ ‚System.String‘ ‚Julekalender.Database.CalendarInfo‘ failed eingeben, da kein Typ-Wandler zwischen diesen Typen umwandeln kann.

Warum nicht Ich bekomme das gleiche für die anderen Arten? Wie wird automatisch konvertiert?


Ich habe drei Felder hinzugefügt (wie die T4-Vorlage nicht diese Typen nicht anhängen), aber ich immer noch null erhalten, wenn POST

ing

Die grüne unten eingerahmt wird das Feld

<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.Calendar.Guid)%> 
</div> 

alt text


Umbenennen der Aktion zu

[HttpPost] 
public ActionResult General2(GeneralInfo model) 

gibt dem gleichen Fehler

alt text

Antwort

2

Stellen Sie sicher, dass, wenn Sie mit diesem Assistenten gibt es Eingang in der Ansicht erzeugten Felder für jede Eigenschaft des Calendar-Objekt so, dass, wenn Sie Beiträge verfassen Das Formular wird an die Controller-Aktion gesendet. Ich bin mir nicht sicher, dass dies der Fall ist (ich habe nicht überprüft, ob der Assistent dies für komplexe Objekte tut, ich habe diesen Assistenten nie benutzt).

Im resultierenden HTML sollten Sie haben:

<input type="text" name="Calendar.Prop1" value="prop1 value" /> 
<input type="text" name="Calendar.Prop2" value="prop2 value" /> 
... and so on for each property you expect to get back in the post action 
... of course those could be hidden fields if you don't want them to be editable 

UPDATE:

Das Problem kommt von der Tatsache, dass Sie ein String-Variable haben calendar in Ihrer Aktion-Methode aufgerufen und ein Objekt, das hat eine Eigenschaft namens Calendar, die verwirrend ist. Versuchen Sie es umzubenennen:

[HttpPost] 
public ActionResult General2(string calendarModel, GeneralInfo model) 

Vergessen Sie auch nicht, es in Ihrer Ansicht umzubenennen.

+0

Ich tat es für nur 3 Felder http://www.balexandre.com/temp/2010-11-07_1458.png, aber ich bekomme immer noch nicht das Objekt, muss ich alle Felder haben? – balexandre

+0

Nein, ein einzelnes Feld reicht aus, um das Objekt zu instanziieren. Ahhhh ich sehe jetzt. Benennen Sie diese "Kalender" -Variable in Ihrer Aktionsmethode um, da sie mit der Eigenschaft "Kalender" verwechselt werden kann. –

+0

aber das ist meine Route '{{calendar}/{controller}/{aktion}/{id}" 'so kann ich einen Kalendernamen übergeben (damit ich weiß, welchem ​​Kalender alle Aktionen gehören) wie' http: // domain/demo/Content/General2' Ich weiß, dass ich den allgemeinen Inhalt für den Kalender mit dem Namen 'demo' angefordert habe. – balexandre

Verwandte Themen