我目前正在为我的游戏评论项目创建一个共享的编辑/创建视图,并且遇到了障碍。每个游戏都可以是各种平台上的标题。我在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);
}
所以,我真的需要在正确的方向上轻推一下,以确定应该检查哪些方框。
感谢。
答案 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添加另一个属性?