c# - 视图(ViewDataDictionary)不接受模型和/或视图期望与预期不同的模型,为什么?
问题描述
我有基于剃须刀页面的 .net 核心网络应用程序。我使用 _Layout 结构,其中包含一些需要在 @renderbody() 中呈现的部分和页面。我有一个 _Sidebar 部分,其中包含应该链接到应该在 @renderbody() 部分中加载的页面的链接。我使用 asp-page 指令添加链接,并在 Pages 文件夹中搭建了一个剃须刀页面项目(视图 + 页面模型)。我不对文件中的脚手架代码进行任何更改。我只将文件名添加到侧边栏链接中的 asp-page 指令中。我运行 Web 应用程序并单击链接,我收到以下错误:
InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'NN.NetworkManagementPortal.Pages.WhitelistingModel', but this ViewDataDictionary instance requires a model item of type 'DeliveryPlanner.Pages.IndexModel'.
问题出在哪里?我正在做与在我没有任何问题的不同项目中完全相同的过程。
侧边栏:
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" asp-page="Index">
<i class="ni ni-settings text-blue"></i> Configuration Items List
</a>
</li>
<li class="nav-item">
<a class="nav-link" asp-page="Whitelisting">
<i class="ni ni-pin-3 text-orange"></i> White-list IP
</a>
</li>
<li class="nav-item">
<a class="nav-link" asp-page="About">
<i class="ni ni-single-02 text-yellow"></i> About </a>
</li>
<li class="nav-item">
<partial name="_LoginPartial">
</li>
</ul>
白名单视图:
@page
@model NN.NetworkManagementPortal.Pages.WhitelistingModel
@{
ViewData["Title"] = "Whitelisting";
}
<h2>Whitelisting</h2>
白名单页面模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace NN.NetworkManagementPortal.Pages
{
public class WhitelistingModel : PageModel
{
public void OnGet()
{
}
}
}
解决方案
当您单击链接时,您的请求会抛出您的控制器以获取模型及其数据。然后,它尝试将此模型绑定到视图。
您没有提供控制器的代码,但它使控制器的操作返回错误的模型类型。
您将视图限制为使用@model NN.NetworkManagementPortal.Pages.WhitelistingModel类型的模型,但您的控制器正在尝试将DeliveryPlanner.Pages.IndexModel类型的模型提供给视图。
仔细检查控制器的操作,应该通过返回WhitelistingModel而不是IndexModel来解决问题。
推荐阅读
- elixir - 如何在 Elixir 中获取特定运行进程的实例?
- amazon-web-services - 无法在 SQS FIFO 上触发 lambda
- php - 如何在不影响其他列的情况下更新列?
- mysql - 使用拆分时间间隔将 SQL 查询转换为 MySQL
- jenkins - 詹金斯 java.lang.NoClassDefFoundError: com/trilead/ssh2/crypto/Base64
- c++ - C++ 线性搜索仅返回 0
- java - 如何在intelliJ中运行需要从clojure编译的类的junit测试
- xamarin - 如何创建充当元素包装器的 XAML 模板?
- bash - Git 预提交钩子检查字符串,如果字符串存在则退出代码 1
- android - 单个 android 应用程序中具有多用户数据库的房间