2010-10-25 48 views
1

我目前正在爲我的遊戲評論項目創建一個共享的編輯/創建視圖,並遇到了麻煩。每個遊戲都可以是各種平臺上的標題。我已將其映射爲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); 
    } 

所以,我真的只需要在正確的方向輕推用邏輯來確定應該檢查哪些盒子。

謝謝。

回答

2

使用Html.CheckBoxFor

謂詞嘗試是被綁定至字段(其應該是一個布爾值)的表達式。

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

而且,我注意到在您的控制器你是返回一個匿名類型 - 應強類型你AdminGameReviewViewModel視圖模型,否則模型綁定將無法工作。

e.g:

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

我真的不知道你想要什麼型號的屬性,你想要的複選框。你確定一件物品可以/不可以有名字嗎?這聽起來像item.Name是一個字符串,這是一個複選框無效 - 你應該綁定到布爾標誌。

也許你應該添加另一個屬性到你的ViewModel?

+0

我的問題的一部分是,我只是不熟悉MVC綁定和表單創建。平臺與遊戲共享多對多關係,但鏈接它們的唯一方法是數據透視表,這在我的EF4模型中實際上並不可見。我必須列出所有可用的平臺,這是我的視圖模型中的Platforms,但我不知道如何將我的GameData的實際平臺映射到整個平臺列表。即使我將其他屬性添加到我的視圖模型中,問題依然存在 - 不知道如何在列表中的正確平臺上設置isChecked。 – 2010-10-25 11:35:03

+0

是的,我在EF4模型中有類似的設置(隱藏交匯點故事以滿足多對多)。當你說'不知道如何在列表中的正確平臺上設置isChecked'時,你是什麼意思?你'檢查'什麼價值?請記住 - 複選框代表真/假值。你是否希望當他們取消勾選該框時能夠移除某個特定平臺的關聯? – RPM1984 2010-10-25 21:11:31

+0

是,或者在所有可用平臺列表中設置與不同平臺的新關聯。所以,如果PS3被選中,我應該可以刪除它和/或檢查XBox 360. – 2010-10-25 21:39:14

相關問題