ASP.NET MVC - Problem with EditorTemplate for ICollection mapped to Enum

У меня есть сайт 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), которым я могу это сделать?

5
задан RPM1984 10 January 2011 в 22:55
поделиться