Asp.net mvc 2 ASP.NET MVC2和EF4-在编辑视图中创建复选框

Asp.net mvc 2 ASP.NET MVC2和EF4-在编辑视图中创建复选框,asp.net-mvc-2,entity-framework-4,views,Asp.net Mvc 2,Entity Framework 4,Views,我目前正在为我的游戏回顾项目创建一个共享的编辑/创建视图,遇到了一个障碍。每个游戏都可以是各种平台上的一个标题。我在EF4模型中将其映射为多对多关系。对于我的视图,我希望有一系列带有每个平台名称的复选框,对于编辑视图,选中正确的复选框 我可以使用HTML助手轻松创建复选框。我最大的问题是弄清楚如何告诉助手在检查了正确的平台值后打开。以下是我目前掌握的情况: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl&

我目前正在为我的游戏回顾项目创建一个共享的编辑/创建视图,遇到了一个障碍。每个游戏都可以是各种平台上的一个标题。我在EF4模型中将其映射为多对多关系。对于我的视图,我希望有一系列带有每个平台名称的复选框,对于编辑视图,选中正确的复选框

我可以使用HTML助手轻松创建复选框。我最大的问题是弄清楚如何告诉助手在检查了正确的平台值后打开。以下是我目前掌握的情况:

<%@ 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>
所以,我真的只需要用逻辑在正确的方向上轻推,以确定应该选中哪些框


谢谢。

尝试使用
Html.CheckBoxFor

谓词是绑定到字段(应该是布尔值)的表达式

我不确定您想要复选框的模型属性。您确定某个项目不能有名称吗?听起来像item.Name是一个字符串,对于复选框无效-您应该绑定到布尔标志


也许您应该在ViewModel中添加另一个属性?

我的部分问题是我不熟悉MVC绑定和表单创建。平台与游戏有着多对多的关系,但链接它们的唯一东西是透视表,它在我的EF4模型中实际上不可见。我必须有一个所有可用平台的列表,这就是我的视图模型中的平台,但我不知道如何将GameData的实际平台映射到整个平台列表。即使我在视图模型中添加了另一个属性,问题仍然存在——不知道如何在列表中的正确平台上设置isChecked。是的,我在EF4模型中有类似的设置(隐藏连接层以适应多对多)。当你说“不知道如何在列表中的正确平台上设置isChecked”时,你是什么意思?您“检查”的值是多少?请记住-复选框表示真/假值。您的意思是,当他们取消选中该框时,您希望能够删除与特定平台的关联?是的,或者在所有可用平台列表中设置与其他平台的新关联。所以,如果检查了PS3,我应该能够删除它和/或检查Xbox360。嗯,是的,这很棘手。复选框与模型属性之间没有1-1绑定(这通常是模型绑定的情况)。我认为这需要手动完成-提交表单时,需要将选中的项目与ViewModel中的“已启用”平台进行比较,然后将未选中的项目从平台集合中删除。但这对我来说并不太好,我认为你不应该允许通过复选框“删除”平台,它应该更明确。(即每个站台旁边的删除按钮)
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);
    }
<%: Html.CheckBoxFor(item => item.Name) %>
var model = new AdminGameReviewViewModel { GameData = game, Genres = genres, Platforms = platforms };