我正在创建一个梦幻足球网站。用户可以在一个页面上选择最多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>
...
基本上,我如何使用该特定玩家位置的适当统计数据动态创建表格?
答案 0 :(得分:2)
我只是在这里大声思考,但你不能创建一个新的HTML帮助器吗?而不是@ Html.DisplayNameFor(),像@ Html.DisplayStatHeader()?将<th></th>
代也放在该方法中。
对于模型,也许您可以使用可空类型?如:
public double? statCat_1 { get; set; }
这个想法是只有在统计数据存在的情况下才会初始化属性。因此,检查@ Html.DisplayStatHeader()中的空值以确定是否应显示类别。