У меня есть сайт ASP.NET MVC 3 (Razor), и (упрощенная) модель под названием Review:
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; }
}
Recommendation выглядит следующим образом:
public class Recommendation
{
public byte RecommendationTypeId
}
У меня также есть enum под названием RecommendationType, который я использую для сопоставления вышеуказанной рекомендации. (на основе RecommendationTypeId).
Итак, подведем итог - один обзор имеет много рекомендаций, и каждая из этих рекомендаций соответствует определенному типу перечисления, я раскрываю свойства крючка для упрощения привязки модели/кода.
Итак, о представлении:
@Html.EditorFor(model => model.Recommendations, "Recommendations")
Довольно просто.
Теперь, для шаблона редактора, я хочу отобразить флажок для каждого возможного RecommendationType (перечисление), и если модель имеет эту рекомендацию (например, в представлении редактирования), я устанавливаю флажок.
Вот что у меня есть:
@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>
Как следует из комментариев - я не знаю, как использовать @Html.CheckBoxFor
. Обычно это принимает выражение, основанное на модели, но я не уверен, как привязать к свойству хука, основанному на текущем значении перечисления в цикле. Например, нужно динамически делать @Html.CheckBoxFor(x => x.RecommendationOne)
, @Html.CheckBoxFor(x => x.RecommendationTwo)
и т.д.
Текущее решение, которое у меня есть (которое работает), включает ручное построение (включая скрытые поля).
Но поскольку я только начинаю разбираться в шаблонах редактора, надеюсь, что кто-то с опытом сможет направить меня в "сильно типизированное" русло.
Или есть более красивый способ (HTML Helper), которым я могу это сделать?