我正在尝试将多个部分视图调用到一个控制器中。我有一个轮播,其中至少有 3 张幻灯片,将由 CMS 管理。我希望能够为每张幻灯片做一个部分视图,并将它们全部调用到带有数组的家庭控制器中。我知道我的视图需要 foreach 循环,但我是否需要为每个部分视图提供一个单独的模型,或者一个模型会起作用吗?我确实看过这个问题和答案,但我认为它与我正在寻找的内容略有不同(ASP.NET MVC - 如何将数组传递到视图?我首先包括了部分视图。视图、模型和控制器代码。我提前道歉,代码一团糟。任何帮助将不胜感激。谢谢。
Partial View - @{
ViewData["Title"] = "_CorporateEvents";
}
<div>
@foreach (var image in Model)
{
<img width="850" height="700">
<img source src="@image.EventImages.File.Url" type="image"
alt="Your browser does not support the image tag." />
}
View--<!-- Wrapper for slides -->
<div class="carousel-inner">
<div class="item active">
</div>
<div class="item">
@Html.Partial("~/Views/Shared/_CorporateEvents.cshtml");
</div>
Model---namespace MyLink.Models
{
public class CorporateEvents
{
[JsonProperty("eventImages")]
public Asset EventImages { get; set; }
}
}
Controller ----public async Task<IActionResult> Index()
{
var qb = QueryBuilder<CorporateEvents>.New.ContentTypeIs("corporateEvents");
var entries = await _client.GetEntriesAsync(qb);
return View(entries);
}
}
}
简而言之,不,您不需要单独的模型来获取分部视图。您可以简单地将模型传递给每个部分,如下所示:
@Html.Partial("~/Views/Shared/_CorporateEvents.cshtml", modelGoesHere);
然而,在你的例子中,有几件事让我感到奇怪。
您的控制器从内容中获取多个条目,每个条目只包含一个Asset
。这些应该是您在轮播中的物品吗?
如果是这样,我将创建一个如下所示的视图:
<div class="carousel-inner">
@foreach(var slide in Model) {
@Html.Partial("~/Views/Shared/_CorporateEvents.cshtml", slide);
}
</div>
部分视图如下所示:
<div class="item">
<img source src="@image.EventImages.File.Url" type="image"
alt="Your browser does not support the image tag." />
</div>
我还建议使用 <contentful-image>
标记助手而不是 img 标记来利用内容丰富的图像 API。然后,您可以将部分视图替换为如下所示的内容:
<div class="item">
<contentful-image url="@image.EventImages.File.Url" width="850" height="700"
alt="Your browser does not support the image tag." />
</div>
只需将@addTagHelper *, Contentful.AspNetCore
添加到您的_ViewImports
文件中即可。
您可以在此处阅读有关内容图像标记助手以及其他可用选项的更多信息:https://www.contentful.com/developers/docs/net/tutorials/aspnet-core/