我目前正在爲我的遊戲評論項目創建一個共享的編輯/創建視圖,並遇到了麻煩。每個遊戲都可以是各種平臺上的標題。我已將其映射爲EF4模型中的多對多關係。在我看來,我希望有一系列複選框和每個平臺的名稱,並且對於編輯視圖,請選中正確的複選框。ASP.NET MVC2和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);
}
所以,我真的只需要在正確的方向輕推用邏輯來確定應該檢查哪些盒子。
謝謝。
我的問題的一部分是,我只是不熟悉MVC綁定和表單創建。平臺與遊戲共享多對多關係,但鏈接它們的唯一方法是數據透視表,這在我的EF4模型中實際上並不可見。我必須列出所有可用的平臺,這是我的視圖模型中的Platforms,但我不知道如何將我的GameData的實際平臺映射到整個平臺列表。即使我將其他屬性添加到我的視圖模型中,問題依然存在 - 不知道如何在列表中的正確平臺上設置isChecked。 – 2010-10-25 11:35:03
是的,我在EF4模型中有類似的設置(隱藏交匯點故事以滿足多對多)。當你說'不知道如何在列表中的正確平臺上設置isChecked'時,你是什麼意思?你'檢查'什麼價值?請記住 - 複選框代表真/假值。你是否希望當他們取消勾選該框時能夠移除某個特定平臺的關聯? – RPM1984 2010-10-25 21:11:31
是,或者在所有可用平臺列表中設置與不同平臺的新關聯。所以,如果PS3被選中,我應該可以刪除它和/或檢查XBox 360. – 2010-10-25 21:39:14