2012-02-15 9 views
7

Supongamos que tengo una vista parcial llamada UserDetails cuya @model cláusula se establece en una clase de modelo llamada User.¿Cómo invoco una vista parcial con "nulo" para su modelo?

Ahora supongamos que tengo otra clase de modelo que se ve algo como esto:

public sealed class SpecialModel 
{ 
    public User SpecialUser; 
    public ... // other stuff 
} 

Dentro de una visión para el SpecialModel, quiero invocar a mi vista parcial mencionado anteriormente:

@model MyProject.Models.SpecialModel 
@{ ViewBag.Title = "..."; } 
<div class='user'>@Html.Partial("UserDetails", Model.SpecialUser)</div> 

Estos trabajos muy bien si el usuario no es null. Sin embargo, si el usuario es null, consigo esta excepción:

System.InvalidOperationException: El elemento de modelo pasado en el diccionario es del tipo 'MyProject.Models.SpecialModel', pero este diccionario requiere un elemento de modelo del tipo 'MiProyecto .Models.User '.

Claramente, el mensaje de excepción es mentira. ¿Cómo puedo arreglar esto correctamente para que pueda pasar null normalmente?

Respuesta

18

En lugar de

@Html.Partial("UserDetails", Model.SpecialUser) 

escribir la más prolija

@Html.Partial("UserDetails", new ViewDataDictionary(Model.SpecialUser)) 

Eso hace que este trabajo escenario específico.

Sin embargo, tiene un inconveniente: borra toda la información que pasó desde el controlador. En particular, borra toda la información de validación; si está publicando algunos datos y desea mostrar un mensaje de error de validación dentro de esa vista parcial, no puede usar esta técnica.

+0

La siguiente solución [aquí] (http://stackoverflow.com/a/12037580/649497) supera la desventaja. – Mojtaba

Cuestiones relacionadas