ASP.NET MVC2 и EF4 - Создание отмеченных флажков в представлении «Правка» - PullRequest
1 голос
/ 25 октября 2010

Я сейчас нахожусь в процессе создания общего представления «Редактировать / Создать» для моего проекта по обзору игр и столкнулся с проблемой.Каждая игра может быть названием на различных платформах.Я обозначил это как отношение многие ко многим в моей модели EF4.На мой взгляд, я хотел бы иметь ряд флажков с именами каждой платформы, а для представления «Правка» установить правильные флажки.

Я могу легко создавать флажки с помощью помощника HTML,Моя самая большая проблема - выяснить, как указать помощнику включить isChecked на правильных значениях платформы.Вот что у меня есть:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HandiGamer.ViewModels.AdminGameReviewViewModel>" %>

<p>
    <%: Html.LabelFor(model => model.GameData.GameTitle) %>
    <%: Html.TextBoxFor(model => model.GameData.GameTitle) %>
    <%: Html.ValidationMessageFor(model => model.GameData.GameTitle) %>
</p>
<p>
    <%: Html.LabelFor(model => model.Genres) %>
    <%: Html.DropDownList("Genre", new SelectList(ViewData["Genres"] as IEnumerable, "GenreID", "Name", Model.GameData.GenreID) %>
</p>
<p>
    <%: Html.LabelFor(model => model.Platforms) %>
    <% foreach(var item in Model.Platforms) { %>
        <%: Html.CheckBox(item.Name) %>
    <% } %>
</p>

И моя модель вида:

public class AdminGameReviewViewModel
{
    public Game GameData { get; set; }
    public List<Genre> Genres { get; set; }
    public List<Platform> Platforms { get; set; }
}

Заполнено:

    public ActionResult EditReview(int id)
    {
        var game = _siteDB.Games.Include("Genre").Include("Platforms").Include("Content").Single(g => g.GameID == id);
        var genres = _siteDB.Genres.ToList();
        var platforms = _siteDB.Platforms.ToList();
        var model = new { GameData = game, Genres = genres, Platforms = platforms }; 

        return View(model);
    }

Итак, мне действительно нужнотолчок в правильном направлении с помощью логики, чтобы определить, какие ячейки следует отметить.

Спасибо.

1 Ответ

2 голосов
/ 25 октября 2010

Попробуйте использовать Html.CheckBoxFor

Предикат - это выражение, связанное с полем (которое должно быть логическим).

<%: Html.CheckBoxFor(item => item.Name) %>

Кроме того, я заметил, что в вашем контроллере вы возвращаете анонимный тип, который должен быть строго типизирован для вашей AdminGameReviewViewModel view-model, иначе привязка модели не будет работать.

например:

var model = new AdminGameReviewViewModel { GameData = game, Genres = genres, Platforms = platforms }; 

Я не совсем уверен, какое свойство модели вы хотите установить для флажка. Вы уверены, что предмет может / не может иметь имя? Звучит так, как item.Name - строка, которая недопустима для флажка - вы должны связываться с логическим флагом.

Может быть, вам стоит добавить другое свойство в вашу ViewModel?

...