【问题标题】:Razor Page Ranking剃刀页面排名
【发布时间】:2020-07-13 21:28:49
【问题描述】:

我正在尝试使用剃须刀页面制作排名页面。

我将从 API(链接到数据库)获取我的数据。

数据库中的样本数据是

CREATE TABLE Member (Id int, Points int);
INSERT INTO Member VALUES (1, 200);
INSERT INTO Member VALUES (2, 100);
INSERT INTO Member VALUES (3, 20);
INSERT INTO Member VALUES (4, 50);
INSERT INTO Member VALUES (5, 300);

我以 memberid = 2 登录,所以我目前的排名是 3。

我需要在表格中显示等级 2、3 和 4 的数据。

示例展示是

Rank      MemberID           Points
 2            1                200
 3            2                100
 4            4                 50

如何做到这一点?

    using (var client = new HttpClient())
            {
                var id = Request.Cookies["MemberId"].ToString();
                client.BaseAddress = new Uri(baseUrl);
                var responseTask = client.GetAsync("api/members");
                responseTask.Wait();
                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    var memberResponse = result.Content.ReadAsStringAsync().Result;
                    Member = JsonConvert.DeserializeObject<IList<Member>>(memberResponse);
                    var member = Member.OrderByDescending(x => x.Points);
                    Member = member.ToList().GetRange(member.ToList().FindIndex(x => x.Id == Int32.Parse(id)) - 1, 3);
                }
                else
                {
                    Member = (IList<Member>)Enumerable.Empty<Member>();
                    ModelState.AddModelError(string.Empty, "Server Error. Please contact administrator.");
                }
            }

这是我到目前为止所得到的。我只能显示来自用户的 +1 和来自用户的 -1。但是我得到的排名是错误的。

<table class="table">
<thead>
    <tr>
        <th>
            Rank
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Member[0].UserName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Member[0].Points)
        </th>
    </tr>
</thead>
<tbody>
    @{int rank = 0;}
    @foreach (var item in Model.Member)
    {
        <tr>
            <td>
                @{rank++;}<label># @rank</label>
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.UserName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Points)
            </td>
        </tr>
    }
</tbody>

这就是我的 cshtml 页面。

谢谢!

【问题讨论】:

    标签: c# api razor razor-pages ranking


    【解决方案1】:

    只是为了让我得到正确的理解,你是在 3 人排行榜之后吗? 那么,在排行榜上与坐在他们上方和下方的会员登录的会员?

    查看 api 看起来它接受了一个 memberId 并仅返回该成员,还有其他 api 吗?可以按等级获取成员,还是成员列表?

    【讨论】:

    • Thought id 还提到了 HttpClient 的使用,理想情况下 HttpClient 应该只实例化一次,因为它不会完全放弃自己。每次实例化它都会用完一个 websocket。更多详情见using httpclient
    • 是的,您正确理解了排行榜的想法。 API 只是会员详细信息而已。
    • 到目前为止,我可以展示其中的 3 个,但我无法获得排名
    • 感谢您更新帖子,以获得排名,我认为您应该像您所做的那样使用 FindIndex()。 “成员 = member.ToList().GetRange(member.ToList().FindIndex(x => x.Id == Int32.Parse(id)) - 1, 3);”但是采取那条线并将其声明为新变量以成为您的会员等级。类似“MemberRank = member.ToList().FindIndex(x => x.Id == Int32.Parse(id))” 的内容应该为您提供该 id 的排名,然后为其他用户提供 +1 和 -1桌子。必须在您按点订购后完成
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 2021-08-14
    • 2019-06-21
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多