2010-11-07 9 views
5

estoy pasando un objeto complejo como Model a la View comoobjeto complejo de Vista al controlador: un objeto es siempre nula

alt text

pero cuando llego el Modelo de vuelta de la vista, un objeto particular viene siempre null mientras que otros tipos complejos son normalmente pasan a través de

alt text

mi punto de vista es la predeterminada Edit fuertemente tipado Ver

alt text

¿Cuál falto?

El ModelState error dice

La conversión de parámetros de tipo 'System.String' al tipo 'Julekalender.Database.CalendarInfo' fracasó porque no hay ningún convertidor tipo puede convertir entre estos tipos.

¿Por qué no hacer obtengo lo mismo para los otros tipos? ¿Cómo se convierte automáticamente?


He añadido 3 campos (como la plantilla T4 no añade este tipo), pero aún así obtener nula cuando POST Ing

El verde en caja de abajo es el campo

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

alt text


Incluso cambiar el nombre de la acción a

[HttpPost] 
public ActionResult General2(GeneralInfo model) 

da el mismo error

alt text

Respuesta

2

Asegúrese de que cuando se utiliza este asistente hay campos de entrada generados en la vista de cada propiedad del objeto Calendario de manera que cuando se contabiliza la forma en que serán enviados a la acción del controlador. No estoy seguro de que este sea el caso (no he verificado si el asistente lo hace para objetos complejos, nunca he usado este asistente).

En el HTML resultante debe tener:

<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 

ACTUALIZACIÓN:

El problema viene del hecho de que tiene una variable de cadena llamada calendar en su método de acción y un objeto que tiene una propiedad llamada Calendar que es confusa. Trate de cambiar su nombre:

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

Asimismo, no se olvide de cambiar su nombre en su opinión.

+0

Lo hice solo por 3 campos http://www.balexandre.com/temp/2010-11-07_1458.png pero todavía no obtengo el objeto, ¿necesito tener todos los campos? – balexandre

+0

No, un solo campo es suficiente para crear una instancia del objeto. Ahhhh veo ahora. Cambie el nombre de esta variable 'calendar' en su método de acción ya que confunde con la propiedad' Calendar'. –

+0

pero esa es mi ruta '" {calendar}/{controller}/{action}/{id} "' así puedo pasar el nombre de un calendario (así sé a qué calendario pertenecen todas las acciones) como 'http: // domain/demo/Content/General2' Sé que solicitó el contenido general para Calendar llamado 'demo'. – balexandre

Cuestiones relacionadas