with net mvc example component asp c# asp.net-mvc razor partial-views helper

c# - net - render partial view mvc 5 example



(Vista parcial) El elemento de modelo que se pasa al diccionario es del tipo ''Cliente'', pero este diccionario requiere un elemento de modelo de tipo ''Perfil de usuario'' (7)

@model Customer @Html.Partial("_UserProfile", (UserProfile)Model.UserProfile)

Cuando ejecuto este código, obtengo este error:

The model item passed into the dictionary is of type ''Customer'', but this dictionary requires a model item of type ''UserProfile''.

Vista parcial _UserProfile está fuertemente tipada.

Quiero poder editar estos campos. ¿Alguna sugerencia?


Agregue la palabra clave "virtual" a la propiedad Perfil de usuario en el modelo de Cliente. Es la forma más fácil de superar la carga lenta, pero el rendimiento ...


Asegúrese de que su Model.UserProfile no sea nulo.

Encontré tu publicación tratando de corregir el mismo error, y resultó que no había inicializado mi equivalente "Model.UserProfile".

Supongo que lo que está sucediendo aquí, es que si un modelo nulo se pasa a RenderPartial, se usa de manera predeterminada el modelo de la vista principal. ¿Alguien puede confirmar esto?


Me encontré con este problema al tratar con partes de un perfil de usuario, como los registros de Nombre y Dirección. Si el usuario tenía un perfil incompleto, quiero que la vista de administración de la cuenta detecte un registro de dirección nulo y muestre un enlace de acción para crear una nueva dirección o mostrar los datos de dirección disponibles.

Tal como lo describen otros cuando se pasa null, la sobrecarga de Html.RenderPartial se activa y se pasa el modelo de vista primario. Terminé convirtiendo mis vistas parciales a las plantillas de visualización y edición para evitarlo. Aquí hay algunos artículos de How-To de: Hansleman y codeguru

Obtiene una mejor reutilización de este método y conserva los valores nulos: en su Vista:

@Html.DisplayFor( m=> m.Address)

Luego maneje el valor nulo en DisplayTemplate.

@model Namespace.Models.MyObject ... if(@Model != null){ ... }else{ ... }


Me he enfrentado al mismo problema, pero finalmente lo había descubierto. Hay una discrepancia de tipo en los modelos pasados. Su Vista acepta modelo de tipo Customer pero su vista parcial está pasando el Userprofile de Customer modelo, por lo que lo que tiene que hacer es pasar el mismo modelo en ambos o .... crear un modelo que tenga todos propiedades de ambos modelos. Seguramente tu problema será resuelto.


Retrocederá en el modelo inicial si el elemento pasado es nulo.

Prueba esto:

@Html.Partial("_UserProfile", (UserProfile)Model.UserProfile ?? new UserProfile())


Si Model.UserProfile es nulo, intentará pasar su modelo de cliente.

Dos formas de evitar esto:

@model Customer @Html.Partial("_UserProfile", (UserProfile)Model.UserProfile, new ViewDataDictionary())

O:

@model Customer if (Model.UserProfile != null) { @Html.Partial("_UserProfile", (UserProfile)Model.UserProfile) }


UserProfile un objeto de tipo Customer en un objeto de tipo UserProfile Customer . Por defecto esto no funcionará ya que el framework no tiene idea de cómo lanzar estos objetos. Si debe hacerlo de esta manera, la única opción es proporcionar un operador de conversión explícito como:

public static explicit operator Digit(byte b) // explicit byte to digit conversion operator { Digit d = new Digit(b); // explicit conversion System.Console.WriteLine("Conversion occurred."); return d; }

Puedes leer más sobre esto here .