Испытываете трудности с определением того, что Html.CheckboxFor () хочет использовать в качестве выражения LINQ. - PullRequest
0 голосов
/ 03 ноября 2010

Название почти говорит само за себя.У меня есть сложный объектный объект EF4, у которого есть список более мелких объектов, которые я хотел бы привязать к флажкам в моем представлении.Я просто не могу понять, как удовлетворить первый аргумент Html.CheckboxFor ().Intellisense продолжает выдавать мне ошибку.

Вот мои модели представлений:

public class PlatformListing
{
    public Platform Platform { get; set; }
    public bool IsSelected { get; set; }
}

public class AdminGameReviewViewModel
{
    public Game GameData { get; set; }
    public List<Genre> AllGenres { get; set; }
    public List<PlatformListing> AllPlatforms { get; set; }
}

И мой (наиболее вероятный ужасный) код контроллера, который заполняет AdminGameReviewViewModel и отправляет его в представление:

    public ActionResult EditReview(int id)
    {
        var game = _siteDB.Games.Include("Genre").Include("Platforms").Include("Content").Single(g => g.GameID == id);
        var genres = _siteDB.Genres.OrderBy(g => g.Name).ToList();
        var platforms = _siteDB.Platforms.OrderBy(p => p.Name).ToList();
        List<PlatformListing> platformListings = new List<PlatformListing>();

        foreach (Platform platform in platforms)
        {
            platformListings.Add(new PlatformListing { Platform = platform, IsSelected = game.Platforms.Any(p => p.PlatformID == platform.PlatformID) ? true : false });
        }

        var model = new AdminGameReviewViewModel { GameData = game, AllGenres = genres, AllPlatforms = platforms }; 

        return View(model);
    }

Я просто не уверен, что мне не хватает, и это сводит меня с ума.Документация, которую я нашел, также не пролила свет на это.

РЕДАКТИРОВАТЬ: соответствующий код вида (частичный вид, который будет использоваться как для создания, так и для редактирования) -

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

<p>
    <%: Html.Label("Game Title") %>
    <%: Html.TextBoxFor(model => model.GameData.GameTitle) %>
    <%: Html.ValidationMessageFor(model => model.GameData.GameTitle) %>
</p>
<p>
    <%: Html.LabelFor(model => model.GameData.Genre) %>
    <%: Html.DropDownList("Genre", new SelectList(Model.AllGenres, "GenreID", "Name", Model.GameData.GenreID)) %>
</p>
<p>
    <%: Html.Label("Platforms") %><br />
    <% foreach(var item in Model.AllPlatforms) { %>
        <%: item.Platform.Name %> <%: Html.CheckBox("Platforms[]", item.IsSelected, new { id = item.Platform.PlatformID }) %><br />
    <% } %>
</p>
<p>
    <%: Html.Label("Review Title") %>
    <%: Html.TextBoxFor(model => model.GameData.Content.Title) %>
</p>
<p>
    <%: Html.Label("Review") %>
    <%: Html.TextAreaFor(model => model.GameData.Content.Text) %>
</p>
<p>
    <%: Html.Label("Review Score") %>
    <%: Html.DropDownList("Score", new SelectList(new int[] {1, 2, 3, 4, 5}, "ReviewScore")) %>
</p>
<p>
    <%: Html.LabelFor(model => model.GameData.Pros) %><br />
    <%: Html.TextBox("Pros[]") %><br />
    <%: Html.TextBox("Pros[]") %><br />
    <%: Html.TextBox("Pros[]") %><br />
    <%: Html.TextBox("Pros[]") %><br />
    <%: Html.TextBox("Pros[]") %>
</p>

1 Ответ

3 голосов
/ 03 ноября 2010

Я полагаю, что вы хотите что-то вроде:

Html.CheckBoxFor(model => model.AdminGameReviewViewModel[i].IsSelected)

внутри некоторого цикла, который определен i в вашем представлении.Размещение вашего представления может помочь сделать это более ясным.

...