ASP.NET MVC2和EF4 - 在“编辑”视图中创建选中的复选框

时间:2010-10-25 02:14:22

标签: asp.net-mvc-2 entity-framework-4 views

我目前正在为我的游戏评论项目创建一个共享的编辑/创建视图,并且遇到了障碍。每个游戏都可以是各种平台上的标题。我在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 个答案:

答案 0 :(得分:2)

尝试使用Html.CheckBoxFor

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

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

另外,我注意到在你的控制器中你返回的是一个匿名类型 - 应该是强类型的 AdminGameReviewViewModel 视图模型,否则模型绑定将不起作用。

e.g:

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

我不确定你想要什么型号属性的复选框。你确定一件物品可以/不能有名字吗?听起来像item.Name是一个字符串,对于一个复选框无效 - 你应该绑定到一个布尔标志。

也许你应该为ViewModel添加另一个属性?