如何在 MVC 中创建动态表 ASP.NET
本文关键字:动态 ASP NET 创建 MVC | 更新日期: 2023-09-27 17:56:17
我正在创建一个梦幻足球网站。 用户最多可以在一个页面上选择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>
...
基本上,我如何动态创建仅包含该特定玩家位置的适当统计数据的表格?
我只是在这里大声思考,但是您不能创建一个新的html助手吗?而不是@Html.DisplayNameFor(),而是像@Html.DisplayStatHeader()? 将<th></th>
生成也放在该方法中。
对于模型,也许您可以使用可为空的类型? 如:
public double? statCat_1 { get; set; }
这个想法是,只有在统计信息存在时,才会初始化属性。 因此,您在 @Html.DisplayStatHeader() 中检查空值以确定是否应显示类别。