关于将单选按钮绑定到MVC中的模型的困惑

时间:2016-08-26 21:58:14

标签: asp.net-mvc

我是MVC的新手。我正在努力建立一个小网站,让人们在NFL比赛中挑选优胜者。我对如何将用户在视图中选择的内容转换为数据库中的数据感到困惑。我正在使用MVC 5和Entity Framework 6。

我希望视图列出每个游戏,显示主队和客队。每个团队旁边都有一个单选按钮。用户选择每个选择旁边的单选按钮,然后单击“提交”按钮。对于每个游戏,我想要阅读已选择两个单选按钮中的哪一个,然后将相关团队的名称写入Picks的数据库表。数据库已经构建,我无法更改它。

所以我有一个Picks模型(id,week_number,game1,game2等)。我有一个Schedule的模型,这是本赛季的所有NFL比赛(id,week_number,game_number,home,away)。我有脚手架的基本控制器,我正在尝试创建一个ViewModel来组合我的视图所需的两个模型。

我不知道怎么做是添加一个单选按钮,使其与旁边的团队名称相关联,这样当我提交时,将确定是否选中了该按钮,如果是,则确定将该团队名称写入数据库。我是否应该为每个单选按钮制作32个布尔属性,然后如果选中它,则在所有游戏列表中查找团队名称?看起来这应该更容易,但我对整个MVC结构感到难过。

另外,这应该发生在控制器中,而不是视图模型吗?如何访问选择了哪个单选按钮?

更新

我尽可能地遵循这里的建议,我更接近。但现在的问题是页面上的所有单选按钮都在一个单选按钮组中 - 也就是说,只能选择一个按钮。我希望表中的每一行都是一个组,这样最终会有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>

1 个答案:

答案 0 :(得分:0)

好消息。您无需创建32 bool。您只需创建一个代表该团队的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"之类的值。