MVC C# 在一个幻灯片轮播中显示数据库中的两个项目
MVC C# show two items from database in one slide carousel
我能够从数据库中检索数据并将其显示在轮播中,一次显示一个项目,但我的要求是在一张幻灯片中一次显示多个项目(2 个项目)。我已经尝试过但无法实现。以下是我的代码供参考:
<div class="container">
<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="2000"
data-pause="hover" data-wrap="true">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
@{int i = 0; }
@foreach (var item in Model)
{
i++;
var active = i == 1 ? "active" : "";
<div class="item @active">
<img src="@Url.Content(item.AchievementCategory.Cat_Img)" alt="@item.A_Title" class="img-responsive" />
<div class="carousel-caption d-none d-md-block">
<h5>@item.A_Title</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
}
</div>
<!-- Left and right controls -->
<a class="left carousel-control" href="#myCarousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
控制器:
public ActionResult
{
var list = db.Achievements.OrderByDescending(x => x.A_Id).ToList();
return View(list);
}
这是一个丑陋的解决方案并且有冗余代码,但我认为可行。
这个想法是让多少个滑块容器等于模型,每个容器都有一个 'current' 元素和下一个。
在两个项目的父项上设置了活动 class。
风景
@model List<WebApplication1.Controllers.ModelModel>;
@{
ViewData["Title"] = "Home Page";
}
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
@for (var index=0; index< Model.Count; index++)
{
var item1 = Model[index];
var item2 = Model[index+1<Model.Count?index+1: 0 ];
var active = index == 0 ? "active" : string.Empty;
<div class="carousel-item @active">
<div class="wrapper">
<div class=" half-item">
<div>@item1.Title</div>
<div>@item1.Desc </div>
</div>
<div class=" half-item">
<div>@item2.Title</div>
<div>@item2.Desc </div>
</div>
</div>
</div>
}
</div>
</div>
<style>
.wrapper {
display:flex;
justify-content:space-between;
}
.half-item {
width:49%;
border:1px solid black;
}
</style>
和控制器方法(简单部分)
public IActionResult Index()
{
var model = Enumerable.Range(1, 4).Select(x => new ModelModel() {
Title = $"Title{x}",
Desc =$"Description{x}{x}"
}).ToList();
return View(model);
}
好吧,我使用了@benuto 建议的逻辑并添加了一些修改并且它起作用了。如果有人需要,我会发布答案。
<div class="carousel-inner" role="listbox" style="border:2px solid red;">
@foreach (var item in Model)
{
for (var index = 0; index < Model.Count; index++)
{
var item1 = Model[index];
//var item2 = Model[index + 1 < Model.Count ? index + 1 : 0];
var active = index == 0 ? "active" : string.Empty;
<div class="item @active">
<div class="row">
<div class="col-xs-3">
<img src="@Url.Content(item.AchievementCategory.Cat_Img)" alt="@item.A_Title" class="img-responsive" />
</div>
<div class="col-xs-3">
<img src="@Url.Content(item1.AchievementCategory.Cat_Img)" alt="@item1.A_Title" class="img-responsive" />
</div>
</div>
</div>
}
}
</div>
public ActionResult CAchievements()
{
var list = db.Achievements.OrderByDescending(x => x.A_Id).ToList();
return View(list);
}
我能够从数据库中检索数据并将其显示在轮播中,一次显示一个项目,但我的要求是在一张幻灯片中一次显示多个项目(2 个项目)。我已经尝试过但无法实现。以下是我的代码供参考:
<div class="container">
<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="2000"
data-pause="hover" data-wrap="true">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
@{int i = 0; }
@foreach (var item in Model)
{
i++;
var active = i == 1 ? "active" : "";
<div class="item @active">
<img src="@Url.Content(item.AchievementCategory.Cat_Img)" alt="@item.A_Title" class="img-responsive" />
<div class="carousel-caption d-none d-md-block">
<h5>@item.A_Title</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
}
</div>
<!-- Left and right controls -->
<a class="left carousel-control" href="#myCarousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
控制器:
public ActionResult
{
var list = db.Achievements.OrderByDescending(x => x.A_Id).ToList();
return View(list);
}
这是一个丑陋的解决方案并且有冗余代码,但我认为可行。 这个想法是让多少个滑块容器等于模型,每个容器都有一个 'current' 元素和下一个。 在两个项目的父项上设置了活动 class。
风景
@model List<WebApplication1.Controllers.ModelModel>;
@{
ViewData["Title"] = "Home Page";
}
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
@for (var index=0; index< Model.Count; index++)
{
var item1 = Model[index];
var item2 = Model[index+1<Model.Count?index+1: 0 ];
var active = index == 0 ? "active" : string.Empty;
<div class="carousel-item @active">
<div class="wrapper">
<div class=" half-item">
<div>@item1.Title</div>
<div>@item1.Desc </div>
</div>
<div class=" half-item">
<div>@item2.Title</div>
<div>@item2.Desc </div>
</div>
</div>
</div>
}
</div>
</div>
<style>
.wrapper {
display:flex;
justify-content:space-between;
}
.half-item {
width:49%;
border:1px solid black;
}
</style>
和控制器方法(简单部分)
public IActionResult Index()
{
var model = Enumerable.Range(1, 4).Select(x => new ModelModel() {
Title = $"Title{x}",
Desc =$"Description{x}{x}"
}).ToList();
return View(model);
}
好吧,我使用了@benuto 建议的逻辑并添加了一些修改并且它起作用了。如果有人需要,我会发布答案。
<div class="carousel-inner" role="listbox" style="border:2px solid red;">
@foreach (var item in Model)
{
for (var index = 0; index < Model.Count; index++)
{
var item1 = Model[index];
//var item2 = Model[index + 1 < Model.Count ? index + 1 : 0];
var active = index == 0 ? "active" : string.Empty;
<div class="item @active">
<div class="row">
<div class="col-xs-3">
<img src="@Url.Content(item.AchievementCategory.Cat_Img)" alt="@item.A_Title" class="img-responsive" />
</div>
<div class="col-xs-3">
<img src="@Url.Content(item1.AchievementCategory.Cat_Img)" alt="@item1.A_Title" class="img-responsive" />
</div>
</div>
</div>
}
}
</div>
public ActionResult CAchievements()
{
var list = db.Achievements.OrderByDescending(x => x.A_Id).ToList();
return View(list);
}