CMS系统将多个局部视图调用到一个控制器中
Calling multiple partial views into one controller for CMS system
我正在尝试将多个局部视图调用到一个控制器中。我有一个至少有 3 张由 CMS 管理的幻灯片的轮播。我希望能够对每张幻灯片进行局部视图,并使用数组将它们全部调用到家庭控制器中。我知道我的视图将需要 foreach 循环,但我是否需要为每个部分视图创建一个单独的模型,或者一个模型是否有效?我确实查看了这个问题和答案,但我认为它与我正在寻找的内容有点不同 (ASP.NET MVC - How to pass an Array to the view?) 我首先包含了局部视图。视图、模型和控制器代码。我提前道歉代码是一团糟。任何帮助,将不胜感激。谢谢你。
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);
但是,您的示例中有几件事让我觉得很奇怪。
您的控制器从 contentful 中抓取了许多条目,每个条目只包含一个 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>
taghelper 而不是 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
文件。
您可以在此处阅读有关 contentful-image taghelper 以及其他可用选项的更多信息:https://www.contentful.com/developers/docs/net/tutorials/aspnet-core/
我正在尝试将多个局部视图调用到一个控制器中。我有一个至少有 3 张由 CMS 管理的幻灯片的轮播。我希望能够对每张幻灯片进行局部视图,并使用数组将它们全部调用到家庭控制器中。我知道我的视图将需要 foreach 循环,但我是否需要为每个部分视图创建一个单独的模型,或者一个模型是否有效?我确实查看了这个问题和答案,但我认为它与我正在寻找的内容有点不同 (ASP.NET MVC - How to pass an Array to the view?) 我首先包含了局部视图。视图、模型和控制器代码。我提前道歉代码是一团糟。任何帮助,将不胜感激。谢谢你。
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);
但是,您的示例中有几件事让我觉得很奇怪。
您的控制器从 contentful 中抓取了许多条目,每个条目只包含一个 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>
taghelper 而不是 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
文件。
您可以在此处阅读有关 contentful-image taghelper 以及其他可用选项的更多信息:https://www.contentful.com/developers/docs/net/tutorials/aspnet-core/