c# - tipo - partial view with model
MVC: Dictionary requiere un elemento de modelo de tipo ''System.Collections.Generic.IEnumerable`1 (4)
Como el error indica que está pasando un tipo incorrecto. Cambio
@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}
a:
@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new List<Example.Services.DAL.Application> { new Example.Services.DAL.Application() });}
Recibo este error y no estoy seguro si puedo hacerlo, aquí está mi código.
Controlador de aplicación
public ActionResult AppView()
{
List<Application> apps;
using (ISiteDbContext context = _resolver.GetService<ISiteDbContext>())
{
apps = context.Applications.ToList();
}
return PartialView("AppView", apps.OrderBy(a => a.Name).ToList());
}
Renderizar parcial: esto se encuentra dentro de una vista que está en el controlador doméstico.
@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}
y mi vista de aplicación
@model IEnumerable<Example.Services.DAL.Application>
@{
ViewBag.Title = "Applications";
}
<h2>Applications</h2>
<p>
@Html.ActionLink("Add New Application", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
@Html.ActionLink("Details", "Details", new { id = item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.ID })
</td>
</tr>
}
</table>
mensaje de error completo:
El elemento de modelo que se pasa al diccionario es del tipo ''Ejemplo.Servicios.DAL.Aplicación'', pero este diccionario requiere un elemento de modelo de tipo ''System.Collections.Generic.IEnumerable`1 [Example.Services.DAL.Application]''.
Para utilizar la ordenación en una colección de objetos (personalizados), necesita un método para clasificarlos. Por lo general, esto se logra al heredar la interfaz "IComparable". En su clase de objeto, necesita un método "Comparar" para determinar el método de comparación de las instancias de sus objetos para clasificar (utilizo "Fecha" en mi proyecto).
Recordar:
Usted usa esto en su Controlador de aplicación:
return PartialView ("AppView", apps.OrderBy (a => a.Name) .ToList ());
Pero para ordenar realmente (o en este caso OrderBy), necesita un método en su clase "Aplicación" que compare las instancias en la lista para ordenarlas. Esto se hace usando el método "Comparar":
int Comparar (Objeto x, Objeto y)
Cómo comparas es totalmente tu decisión. El resultado, sin embargo, es:
- Menos que cero: Objeto x <Objeto y
- Cero: Objeto x = Objeto y
- Mayor que cero: Objeto x> Objeto y
Espero que esto ayude. ¡Buena suerte!
Estimados saludos, Björn
Su AppView.cshtml
se enlaza al tipo fuerte de @model IEnumerable<Example.Services.DAL.Application>
y mientras llama a esta vista, está pasando @{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}
Debería ser el objeto de la lista. Debe pasar la list
de Example.Services.DAL.Application()
Cambia tu
@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new Example.Services.DAL.Application());}
a
@{Html.RenderPartial("~/Views/Application/AppView.cshtml", new List<Example.Services.DAL.Application> { new Example.Services.DAL.Application() });}
su código está buscando un Ienumerable porque lo que pasa a su vista parcial debe ser igual a lo que está en su vista así que trate de cambiar la primera línea de su vista de aplicación a
@model Example.Services.DAL.Application
Me funcionó, afortunadamente, también fue de utilidad para ti: D