如何在 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>
            ...

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

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

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

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

public double? statCat_1 { get; set; }

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