首页 > 解决方案 > 视图(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()
        {

        }
    }
}

标签: c#.net-corerazor-pages

解决方案


当您单击链接时,您的请求会抛出您的控制器以获取模型及其数据。然后,它尝试将此模型绑定到视图。

您没有提供控制器的代码,但它使控制器的操作返回错误的模型类型。

您将视图限制为使用@model NN.NetworkManagementPortal.Pages.WhitelistingModel类型的模型,但您的控制器正在尝试将DeliveryPlanner.Pages.IndexModel类型的模型提供给视图。

仔细检查控制器的操作,应该通过返回WhitelistingModel而不是IndexModel来解决问题。


推荐阅读