如何“;寻呼”;结果放入行而不是页面

本文关键字:寻呼 结果 如何 | 更新日期: 2023-09-27 18:00:45

这个对我来说很难用词,这就是我在谷歌搜索中失败的原因,我是asp.net的新手,它给我这个需求的逻辑带来了一些困难

我有一堆结果,主要显示为叠加了一些文本的图像。

我有一些显示这些图像所需的HTML,但它使用自定义样式来显示每一行图像,它使用div来显示自定义外观。

我需要做的是,在cshtml文件中找到一种方法,显示一个html块来开始一行,然后输出其中6个项目的html,然后关闭该行并开始另一行,并重复冲洗直到完成,但我一辈子都无法在asp.net中找到如何做到这一点。

这可能是一个非常非常简单的问题,但由于我无法在谷歌上正确使用这个词,我真的很难在网上找到任何东西。

我能想到的最接近视觉的例子是类似Netflix的东西,但无法滚动电影,所以所有电影都列在这些行中。

我目前正在使用以下方法,

@foreach (var item in Model)
{
  html...
}

我最初的想法是有一个计数器,当计数达到6时做一个条件语句,关闭行并开始一个新的行,但我不知道如何将那么多html混合到代码块中。

@{
 int count = 0;
 foreach(var item in model)
 {
    count++;
    //Output current item's html 
    if(count == 6)
    {
        //End current row, start new row
        count = 0;
    } 
 }

但正如我所提到的,我只能找到如何使用@:方法将单个html元素与代码块混合在一起,并且我需要一个html块。

根据要求添加我的控制器代码,我可以使用viewbag进行操作,但groupedModel似乎将每部电影分割成一行。

// GET: Movies
public ActionResult Index(string movieGenre, string searchString)
{
    var GenreList = new List<string>();
    var GenreQry = from d in db.Movies
                   orderby d.Genre
                   select d.Genre;
    GenreList.AddRange(GenreQry.Distinct());
    ViewBag.movieGenre = new SelectList(GenreList);
    var movies = from m in db.Movies
                 select m;
    if(!String.IsNullOrEmpty(searchString))
    {
        movies = movies.Where(s => s.Title.Contains(searchString));
    }
    if(!string.IsNullOrEmpty(movieGenre))
    {
        movies = movies.Where(x => x.Genre == movieGenre);
    }
    var groupedModel = movies.AsEnumerable().Select((e, i) => new { Element = e, Index = i }).GroupBy(e => e.Index % 6).Select(g => g.Select(e => e.Element));
    ViewBag.grouped = groupedModel;
    return View(movies);
}

以及我的观点(为了便于阅读,删除了大部分HTML):

@model IEnumerable<MvcMovie.Models.Movie>
@{
    ViewBag.Title = "Index";
}
<p>
    @Html.ActionLink("Create New", "Create")
    @using (Html.BeginForm("Index", "Movies", FormMethod.Get))
    {
        <p>
            Genre: @Html.DropDownList("movieGenre", "All")
            Title: @Html.TextBox("SearchString")
            <input type="submit" value="Filter" />
        </p>
    }
</p>
@foreach(var group in ViewBag.grouped)
{ 
   <div class="MovieRow">
       @foreach (var item in group)
       { 
           <div class="bob-title">@Html.Display((item as MvcMovie.Models.Movie).Title)</div>
       }
   </div>
}

编辑:

我现在剩下的唯一问题是,我似乎无法输出项变量,@Html.Display((item as MvcMovie.Models.Movie)部分都没有输出任何内容。

如何“;寻呼”;结果放入行而不是页面

首先,让我们对您的模型进行分组,以获得具有6个元素的组(最好在控制器中进行,而不是在视图中):

var groupedModel = Model.Select((e, i) => new { Element = e, Index = i })
                        .GroupBy(e => (e.Index - 1) / 6)
                        .Select(g => g.Select(e => e.Element));

然后迭代这些组并显示它们:

@foreach(var group in groupedModel)
{
    <div id="rowDiv">
    @foreach(var element in group)
    {
        <div id="elementDiv">// element div here
            // display element info here
        </div>// element div end
    }
    </div>    // row div end
}