Как правильно сделать страницу рейтинга / таблицы лидеров в ASP. NET Core MVC - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь найти более подробный способ отображения рейтинга для моего сайта mov ie. Это моя модель Mov ie .cs

public int MovieId { get; set; }
public string MovieTitle { get; set; }
public int ViewCounter { get; set; }

У меня есть ViewCounter , который я использую, чтобы подсчитать, сколько людей посетили c Mov ie. Это мой контроллер:

 public IActionResult Ranking()
        {
            var item = from m in databaseContext.Movies.Include("Genre").Include("Director")
                       where m.IsHidden == false
                       orderby m.ViewCounter descending
                       select m;
            return View(item.ToList());
        }

Это вид для этого контроллера:

@model IEnumerable<WebXemPhim.Models.Domain.Movie>

<div class="blog-list-area section pt-100 pt-lg-80 pt-md-70 pt-sm-60 pt-xs-50 pb-xs-50">
    <div class="container">
        <div class="row row-25">
            <div class="col-lg-8">
                <div class="row">

                    @foreach (var item in Model)
                    {
        <div class="col-12">
            <!--Single Blog Post Start-->
            <div class="single-blog-post blog-list mb-30">
                <div class="blog-img">
                    <a href="single-blog.html"><img src="~/images/@item.MovieImageName" alt=""></a>
                </div>
                <div class="blog-content">
                    <h3><a href="single-blog.html">@item.MovieTitle</a></h3>
                    <p>@item.MoviePlot</p>
                    <div class="blog-bottom">
                        <ul class="meta meta-border-bottom">
                            <li><a>@item.ViewCounter</a></li>
                        </ul>
                    </div>
                </div>
            </div>
            <!--Single Blog Post End-->
        </div>}
                </div>
            </div>
        </div>
    </div>
</div>
<!--Blog Area End-->

Пока все хорошо, но теперь отсутствует НОМЕР РАНГА (например, 1,2,3 , 4) (mov ie с наибольшим количеством просмотров будет 1), и я просто не знаю, как добавить дополнительный столбец с LINQ. Какие-либо предложения? Или я должен просто создать новый столбец, в котором будет храниться RANK для каждого mov ie?

Ответы [ 4 ]

0 голосов
/ 15 июля 2020

Вы можете либо добавить его как столбец в БД (что, я думаю, намного менее динамично c), либо вы можете динамически добавить столбец в представление с параметром for l oop.

0 голосов
/ 14 июля 2020

Термин, который вы ищете, называется порядковыми числами. Чтобы добавить порядковый номер для каждого mov ie, вы, вероятно, захотите динамически создать кортеж или что-то подобное в вашем контроллере и отобразить это в вашем представлении. Что касается фактического создания порядковых номеров, здесь есть несколько примеров -> Есть ли простой способ создать порядковые номера в C#?

0 голосов
/ 15 июля 2020

Пока все хорошо, но теперь отсутствует НОМЕР РАНГА (например, 1,2,3,4) (mov ie с наибольшим количеством просмотров будет 1), и я просто не знаю, как фактически добавьте дополнительный столбец с LINQ. Какие-либо предложения? Или я должен просто создать новый столбец, в котором будет храниться RANK для каждого фильма?

Из вашего описания кажется, что вы хотите отобразить номер рейтинга на основе ViewCounter, верно?

Чтобы отобразить базу RankNumber на ViewCounter, сначала вы можете создать модель представления MovieViewModel со свойством Ranking, эта модель представления используется только для отображения модели Mov ie.

public class MovieViewModel
{
    public int MovieId { get; set; }
    public string MovieTitle { get; set; }
    public int ViewCounter { get; set; }
    public string Ranking { get; set; }
}

В Оператор Linq, после упорядочивания данных вы можете получить индекс порядка, а затем в соответствии со значением установить RankNumber:

    public IActionResult Ranking()
    {
        //get the movie list
        List<Movie> movies = _InitData.GetMovie();

        var result = movies.OrderByDescending(c => c.ViewCounter)
            .Select((c, index) => new MovieViewModel
            {
                MovieId = c.MovieId,
                MovieTitle = c.MovieTitle,
                ViewCounter = c.ViewCounter,
                Ranking = index < 5 ? "1" : index < 10 ? "2" : index < 15 ? "3" : "4" //based on the index to set ranking
            }); 
        return View(result);
    }

После рендеринга вывод будет следующим:

введите описание изображения здесь

0 голосов
/ 14 июля 2020

Если вы хотите отобразить порядок уже имеющейся собственности, просто выполните

@foreach (var item in Model.OrderByDescending(m => m.ViewCounter))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...