Asp.net core 如果不制作一个大型模型,就无法同时使用mvc模型和布局吗

Asp.net core 如果不制作一个大型模型,就无法同时使用mvc模型和布局吗,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,我正在尝试使用商店网站的布局 每个页面都有不同的数据,只有左侧菜单数据是通用的。 似乎我不得不拥有一个巨大的全球模型,其中包含了所有可能的数据。例如 ShopModel.menu、ShopModel.category、ShopModel.footer、ShopModel.category leader等。 它会永远持续下去,变得非常复杂 没有办法将代码分开,以便菜单处理菜单,类别处理类别等。 似乎是Web表单的一大倒退。 我在菜单中尝试了一个带有自己@model的_partial,但它似乎被忽略

我正在尝试使用商店网站的布局

每个页面都有不同的数据,只有左侧菜单数据是通用的。 似乎我不得不拥有一个巨大的全球模型,其中包含了所有可能的数据。例如 ShopModel.menu、ShopModel.category、ShopModel.footer、ShopModel.category leader等。 它会永远持续下去,变得非常复杂

没有办法将代码分开,以便菜单处理菜单,类别处理类别等。 似乎是Web表单的一大倒退。 我在菜单中尝试了一个带有自己@model的_partial,但它似乎被忽略了,CHTML仍然在主ShopModel中寻找数据

当然,在第一天,我试着在页面上添加多个@models,但这不起作用

编辑: 不幸的是,我不能很好地解释这一点,因为我认为这是第一天的问题。 我希望_布局包含MENU@model作为它的常用元素。 然后,我希望将我的CATEGORY@model添加到索引页面,因为它在foreach中循环类别


Html很好。我知道如何添加分部,但如何添加具有动态foreach数据的自给自足分部呢?

如果左侧菜单是整个系统的公共元素,只需将其代码放在共享文件夹的Layout.cshtml页面中即可。整个系统共有的所有视觉元素都可以放在那里,如页眉、此菜单、页脚等。视图文件夹根目录下的_ViewStart.cshtml页面将系统设置为查找其
布局
参数中引用的页面,并包含其中的所有视图。局部视图只是指在不包含这些公共信息的情况下呈现/编码页面正文。

视图组件似乎是保持页面整洁和独立的答案


当然可以使用partials。对于布局页面上的菜单之类的东西,您可以使用
@{Html.RenderPartial(…);}
调用一个返回partialYes我可以使用partial的控制器方法,但是如何在不将此模型与页面上的其他模型一起放入pages@model中的情况下将其放入其中。
@foreach(SelectListItem-in-model){Bla}
是否@model VerybigViewModel必须包含我在所有页面上需要的所有模型。?当然不是。视图中的模型只包含您在特定视图中需要的属性。对于常见项目,如布局中的菜单,您可以使用
@{Html.RenderAction();}
来包含部分(即使它们需要模型,它们也不是视图模型的一部分,因为您可以在由
RenderAction
调用的单独控制器方法中初始化:布局不包含
@model
定义(除非该布局使用的所有其他模型都使用了基础视图模型)。同样。如果您需要控制器逻辑来生成菜单,请创建一个
[ChildActionOnly]public ActionResult menu()
方法来生成您的模型并使其返回部分视图。然后使用
@Html.Render(“menu”)
将其包含在您的布局中。如果我说这是错误的
@wait Html.partialsync(“_菜单“
和您的是正确的(
@{Html.RenderAction('Menu');}
),因为它将是完全独立的,并且有自己的
@model IEnumerable
返回视图(mymenuViewmodel);
没错。PartialView和ViewComponent之间的主要区别在于PartialView没有自己的模型,而ViewComponent有自己的模型。下面是我回答的一个相关问题,可能会有所帮助: