Tengo una página web ASP.NET MVC 3 (Razor), y un modelo (simplificado) llamado revisión:ASP.NET MVC - Problema con EditorTemplate para ICollection <T> asignada a Enum
public class Review
{
public int ReviewId { get; set; }
public bool RecommendationOne
{
// hook property - gets/set values in the ICollection
}
public bool RecommendationTwo { // etc }
public ICollection<Recommendation> Recommendations { get; set; }
}
Recomendación es el siguiente:
public class Recommendation
{
public byte RecommendationTypeId
}
que también tienen una enumeración llamada RecommendationType, que utilizo para mapear la recomendación anterior a. (basado en RecommendationTypeId).
Entonces, para resumir - una sola revisión tiene muchas recomendaciones , y cada una de esas recomendaciones se asigna a un tipo de enumeración en particular, i exponen propiedades de gancho para simplificar vinculante modelo/código.
Por lo tanto, a la vista:
@Html.EditorFor(model => model.Recommendations, "Recommendations")
bastante simple.
Ahora, para la plantilla del editor, quiero mostrar una casilla para cada posible RecommendationType (enum), y si el modelo tiene esa recomendación (por ejemplo, en la vista de edición), marque la casilla.
Esto es lo que tengo:
@model IEnumerable<xxxx.DomainModel.Core.Posts.Recommendation>
@using xxxx.DomainModel.Core.Posts;
@{
Layout = null;
}
<table>
@foreach (var rec in Enum.GetValues(typeof(RecommendationType)).Cast<RecommendationType>())
{
<tr>
<td>
@* If review contains this recommendation, check the box *@
@if (Model != null && Model.Any(x => x.RecommendationTypeId == (byte)rec))
{
@* How do i create a (checked) checkbox here? *@
}
else
{
@* How do i created a checkbox here? *@
}
@rec.ToDescription()
</td>
</tr>
}
</table>
Como sugiere el comentario - no sé cómo utilizar @Html.CheckBoxFor
. Por lo general, toma una expresión basada en el modelo, pero estoy seguro de cómo enlazar a la propiedad del gancho en función del valor enum actualmente en bucle. Por ejemplo que tiene que hacer de forma dinámica @Html.CheckBoxFor(x => x.RecommendationOne)
, @Html.CheckBoxFor(x => x.RecommendationTwo)
, etc.
La solución actual que tengo (que trabaja), implica la construcción manualmente el <input>
(incluyendo campos ocultos).
Pero como estoy empezando a utilizar las plantillas de editor, espero que alguien con experiencia me pueda señalar en una dirección "fuertemente tipada".
¿O existe una forma más agradable (HTML Helper) de hacer esto?
En serio, Darin, eres increíble. :) Esto se ve muy bien, voy a intentar esto y me pondré en contacto contigo. +1 por ahora. :) – RPM1984
¡Funciona con encanto! – RPM1984