2016-08-26 54 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"的值。