有很多类似的问题,但没有好的答案.这是我的try :

我想使用_Layout.cshtml中的局部视图来显示将出现在每个页面上的菜单.

My_Layout.cshtml:

 <div id="navbar" class="navbar-collapse">
    <partial name="_TopLevelMenu" model="Model.MainMenuModel" />
 </div>

My_TopLevelMenu.cshtml Partial:

@model List<Data.Models.MainMenuModel>

<ul id="ulMainMenu" class="nav navbar-nav">
    
@foreach (var item in Model){
    <li @item.NavId>
      <a href="@item.NavigationUrl">@item.DisplayName</a>
    </li>
}
</ul>

我的错误:

RuntimeBinderException: 'MyApp.Pages.IndexModel' does not contain a definition for 'MainMenuModel'

我试过的东西:

"Pass the model"-当我这样做时,我得到了同样的错误,此外,Visual Studio强烈建议我改用部分标记帮助器.

使用不带命名型号的partial标记,这会给出这个错误:InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'MyApp.Pages.IndexModel', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.List1[MyApp.Data.Models.MainMenuModel]‘.’

我只try 了MainMenuModel,但Visual Studio告诉我这是一个类型,我不能为我的模型使用类型.

我查看了this website作为指导,它使用了我的一些关键搜索词("Menu"、"Layout"),但没有使用_Layout.cshtml页面作为示例的一部分.

如果我做<partial name="_TopLevelMenu" model=new MainMenuModel()" />,我不会得到错误,但我也不会从Partial中获取数据来填充.

我必须做什么才能正确地将部分菜单项显示在所有页面上?

推荐答案

Chen已经很好地解释了错误消息的原因和解决方案,还注意到在将模型传递给布局中的部分时,必须在every页中定义引用该布局的模型.您可以通过为页面实现基类并在那里定义模型来实现这一点,然后从基类派生所有页面,但在实践中,这可能会使管理变得非常麻烦.

我建议对布局中的UI段使用View Components,其中UI段依赖于生成内容的服务器端逻辑:

它们的设置比部分设置稍微复杂一些,但它们负责生成自己的数据.

Csharp相关问答推荐

[0-n]范围内有多少个Integer在其小数表示中至少包含一个9?

如何从C#中有类.x和类.y的类列表中映射List(字符串x,字符串y)?

发布.NET框架项目将.NET核心元素注入到web. connect中

无法将blob发送到Azure -缺少HTTP标头异常

在Dapper中使用IasyncEum重写GetAsyncEum方法

. NET 8使用COM向VB6公开

如何修改中间件或其注册以正确使用作用域服务?

使用命令初始化可绑定属性

使页面内容居中

附加标题不起作用,而添加则起作用

如何将MongoDB序列化程序设置为内部对象属性

未找到任何HTTP触发器.成功部署Azure Functions Project后(c#)

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

C#普罗米修斯指标

关于扩展文件类C#的矛盾

实体框架-IsRequired()与OnDelete()

如何在发布NuGet包之前设置命名空间?

EF Core:如何对关系属性进行建模?

.NET文档对继承的困惑

使用SQL Server 2022+时,我是否必须将代码从SqlConnection类对象中迁移出来?