如何在ASP.NET MVC中创建动态表

时间:2015-06-15 20:14:41

标签: c# asp.net asp.net-mvc

我正在创建一个梦幻足球网站。用户可以在一个页面上选择最多5个玩家,然后单击“比较”,以便查看这些特定玩家的更详细比较。我从NFl的API页面中提取了统计数据,该页面列出了91个不同类别的统计数据。但是,并非所有统计类别都适用于所有类型的玩家(例如踢球者不使用“传球码”)。

当用户到达“比较”页面时,我希望仅使用相关统计信息创建统计表。我目前有一个包含所有91个类别的视图模型,在我的控制器中,我根据玩家所扮演的位置运行4个不同的统计查询之一。但是,我如何只在视图中显示该玩家的特定/适当的统计数据?

我能想到的一个选项是加载所有列,然后使用jQuery隐藏那些不适用的列,但有没有更好的方法用C#执行此操作?

public class PlayerIndexViewModel
{
    public Player player { get; set; }
    public PlayerBackground playerBackground { get; set; }
    public Team team { get; set; }
    public WeekStat weekStat { get; set; }

    public PlayerIndexViewModel() { }
    public PlayerIndexViewModel(Player p, PlayerBackground pb, Team t, WeekStat w)
    {
        player = p;
        playerBackground = pb;
        team = t;
        weekStat = w;
    }

    //  QB stats  1-19, 30-32
    //  RB stats  1, 13-27, 30-32
    //  WR stats  1, 13-27, 30-32
    //  TE stats  1, 13-27, 30-32
    //  K stats   1, 33-44
    //  DEF stats 1, 45-69

    // GP
    [Display(Name = "GP")]
    public double statCat_1 { get; set; }
    [Display(Name = "Pass Att")]
    public double statCat_2 { get; set; }
    [Display(Name = "Pass Comp")]
    public double statCat_3 { get; set; }
    ...

在我的控制器中:

[HttpPost]
public ActionResult Compare(FormCollection f)
{
    ...
    if (position == "QB")
    {
        var statAggs = from sw in db.WeekStats
                       where sw.season == 2014
                       group sw by sw.playerId into ps
                       select new //WeekStat
                       {
                           playerId = ps.Key,
                           statCat_1 = ps.Sum(x => x.statCat_1),
                           statCat_2 = ps.Sum(x => x.statCat_2),
                           statCat_3 = ps.Sum(x => x.statCat_3),
                           statCat_4 = ps.Sum(x => x.statCat_4),
                           statCat_5 = ps.Sum(x => x.statCat_5),
              ...

在我看来:

<div class="row">
<div class="col-lg-12 col-md-12 " style="display: inline-block; overflow-x:scroll; padding:0px;">
    <table class="table table-striped table-hover " id="tablePlayers" style="margin-bottom:0px;" >
        <thead>
            <tr>
                <th ></th>
                <th >
                    @Html.DisplayNameFor(model => model.player.playerName)
                </th>
                <th >
                    @Html.DisplayNameFor(model => model.player.position)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.team.teamName)
                </th>               
                <th>
                    @Html.DisplayNameFor(model => model.statCat_1)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.statCat_2)
                </th>
            ...

基本上,我如何使用该特定玩家位置的适当统计数据动态创建表格?

1 个答案:

答案 0 :(得分:2)

我只是在这里大声思考,但你不能创建一个新的HTML帮助器吗?而不是@ Html.DisplayNameFor(),像@ Html.DisplayStatHeader()?将<th></th>代也放在该方法中。

对于模型,也许您可​​以使用可空类型?如:

public double? statCat_1 { get; set; }

这个想法是只有在统计数据存在的情况下才会初始化属性。因此,检查@ Html.DisplayStatHeader()中的空值以确定是否应显示类别。