ASP.NET MVC / C#:如何显示属于另一个控制器的部分视图数据

Posted

技术标签:

【中文标题】ASP.NET MVC / C#:如何显示属于另一个控制器的部分视图数据【英文标题】:ASP.NET MVC / C# : how to display partial view data that belongs to another controller 【发布时间】:2021-11-13 07:14:28 【问题描述】:

我有一个属于 CategoryController 的名为 BlogsCategory.cshtml 的视图。目前在此视图中,页面按预期方式加载了我的博客类别列表。

除了已经加载的数据之外,我还希望能够在属于另一个名为 AdvertisementController 的控制器的同一视图 (BlogsCategory.cshtml) 上加载数据,该控制器的数据来自另一个名为 tblAdvertisement 的表。

我不想在 BlogCategories 表和 Advertisement 表之间创建数据库关系,所以我想知道如何通过部分视图来完成此操作,该部分视图可以在属于 CategoryController 的视图上从 AdvertisementController 加载数据。

我尝试在该视图上添加此@Html.Partial,但不断收到错误消息,指出以下错误。

@model List<Systex.Models.tblCategory>

@Html.Partial("~/Views/Advertisement/Horizontal1.cshtml")

System.InvalidOperationException: '传入字典的模型项的类型为'System.Collections.Generic.List`1[Systex.Models.tblBlogsCategory]',但此字典需要'Systex.Models 类型的模型项.tblAdvertisement'。'

然后,包含我要加载的数据的视图如下所示。这是我试图从 BlogsCategory.cshtml 视图中调用的 AdvertisemenController 的视图。

Horizo​​ntal1.cshtml

@model Systex.Models.tblAdvertisement

//Display these 2 strings on the view called BlogsCategory.cshtml
@Model.BlogCategoriesListVerticalString1
@Model.BlogCategoriesListVerticalString2

【问题讨论】:

【参考方案1】:

如果您不想创建数据库关系,如果您使用的是我推荐的 EFCore,那么您必须将一些识别信息传递给控制器​​,例如 ID 并查找数据然后映射到视图型号。

【讨论】:

对的人,谢谢!它奏效了,我按照你的建议做了,除了我只使用了viewbags而不是使用id。在控制器中,我创建了数据所在的表的实例,然后将表中的每个字段分配为每个视图袋的值,然后,在视图上,我加载了视图袋并让它们显示数据。

以上是关于ASP.NET MVC / C#:如何显示属于另一个控制器的部分视图数据的主要内容,如果未能解决你的问题,请参考以下文章

加入后将不同类型返回到视图(ASP.NET MVC2 C#)

如何使用C#从asp.net MVC中的枚举绑定下拉列表[重复]

AJAX 回调未显示成功消息 - ASP.NET MVC C#

ASP.NET mvc html 列显示

如何在asp.net mvc视图中显示数据库记录

ASP.NET MVC C# - 显示类属性名称而不是 JSON 中的属性名称