2016-08-26 57 views
0

我是MVC的新手。我試圖建立一個小型網站,讓人們在NFL比賽中挑選優勝者。我很困惑如何將用戶在視圖中選擇的內容轉換爲數據庫中的數據。我正在使用MVC 5和實體框架6.關於將單選按鈕綁定到MVC模型的困惑

我希望列出每個遊戲的視圖,顯示主隊和客隊。每個團隊旁邊都有一個單選按鈕。用戶選擇每個選擇旁邊的單選按鈕,然後單擊提交按鈕。對於每個遊戲,我想讀取已選擇的兩個單選按鈕中的哪一個,然後將相關團隊的名稱寫入Picks的數據庫表中。數據庫已經建好,我無法改變它。

所以我有一個模型的精選(id,week_number,game1,game2等)。我有一個Schedule的模型,這是本賽季所有的NFL比賽(id,week_number,game_number,home,away)。我有基本的控制器從腳手架出來,我試圖創建一個ViewModel來結合我的視圖需要的兩個模型。

我不知道該怎麼做是添加一個單選按鈕,以便它與它旁邊的團隊名稱綁定,這樣當我提交它時將確定該按鈕是否被選中,如果是,將該團隊名稱寫入數據庫。我應該爲每個單選按鈕製作32個布爾屬性,然後如果它被選中,請在所有遊戲列表中查找球隊名稱?這似乎應該容易得多,但我對整個MVC結構感到困惑。

此外,這是否應該發生在控制器,而不是視圖模型?我如何訪問選擇哪個單選按鈕?

UPDATE

我跟着建議,這裏盡我所能,我很接近。但現在的問題是,頁面上的所有單選按鈕都在一個單選按鈕組中 - 也就是說,只能選擇一個按鈕。我想讓表中的每一行都是一個組,所以最終會有16個按鈕被選中。以下是我使用的型號和視圖:

public class GameViewModel 
{ 
    public string AwayTeam { get; set; } 
    public string HomeTeam { get; set; } 
    public string SelectedTeam { get; set; } 

    public GameViewModel() 
    { 
     AwayTeam = string.Empty; 
     HomeTeam = string.Empty; 
     SelectedTeam = string.Empty; 
    } 

    public GameViewModel(string away, string home) 
    { 
     AwayTeam = away; 
     HomeTeam = home; 
     SelectedTeam = string.Empty; 
    } 
} 


public class WeeklyPicksViewModel 
{ 
    private NFLEntities db = new NFLEntities(); 

    public int MNFscore { get; set; } 
    public List<GameViewModel> WeeklySchedule { get; set; } 
    public int WeekNumber { get; set; } 

    public WeeklyPicksViewModel(List<schedule> weeklySchedule, int userid) 
    { 
     List<GameViewModel> week = new List<GameViewModel>(); 
     foreach (var game in weeklySchedule) 
     { 
      GameViewModel g = new GameViewModel(game.away, game.home); 
      week.Add(g); 
     } 
     WeeklySchedule = week; 
    } 
} 


@model FootballPickEm.ViewModels.WeeklyPicksViewModel 

<h2>Picks Page</h2> 
<hr /> 

<div> 
    <table> 
     @foreach (var game in Model.WeeklySchedule) { 
      <tr> 
       <td> 
        @Html.RadioButtonFor(m => game.SelectedTeam, game.AwayTeam) 
       </td> 
       <td> 
        <img src="~/images/@(game.AwayTeam.ToLower()).gif" /> 
       </td> 
       <td> 
        @Html.DisplayFor(m => game.AwayTeam) 
       </td> 
       <td> 
        AT 
       </td> 
       <td> 
        @Html.RadioButtonFor(m => game.SelectedTeam, game.HomeTeam) 
       </td> 
       <td> 
        <img src="~/images/@(game.HomeTeam.ToLower()).gif" /> 
       </td> 
       <td> 
        @Html.DisplayFor(m => game.HomeTeam) 
       </td> 
      </tr> 
     } 
    </table> 
</div> 
+0

'bool'屬性不合適(通常與複選框一起使用)。你需要一個屬性(說)'SelectedTeam'和2個單選按鈕 - '@ Html.RadioButtonFor(m => m.SelectedTeam,Model.HomeTeam)'和'@ Html.RadioButtonFor(m => m.SelectedTeam,Model.AwayTeam )',當你提交時,'SelectedTeam'將包含所選團隊的價值 –

回答

0

好消息。您不需要創建32 bool s。您可以創建一個代表團隊的string(或enum或其他)。如果您撥打team,您可以生成這樣的單選按鈕。

<label><input type="radio" name="team" value="piggers">The Piggers</label> 
<label><input type="radio" name="team" value="dogcatchers">The Dogcatchers</label> 

然後,當您提交表單,您team屬性將包含像"piggers"的值。