【问题标题】:Model not accepted by view (ViewDataDictionary) and/or view expecting different model than it supposed to, why?视图(ViewDataDictionary)不接受模型和/或视图期望与预期不同的模型,为什么?
【发布时间】:2019-08-31 23:03:15
【问题描述】:

我有基于剃须刀页面的 .net 核心网络应用程序。我使用 _Layout 结构,其中包含一些需要在 @renderbody() 中呈现的部分和页面。我有一个 _Sidebar 部分,其中包含应该链接到应该在 @renderbody() 部分中加载的页面的链接。我使用 asp-page 指令添加链接,并在 Pages 文件夹中搭建了一个剃须刀页面项目(视图 + 页面模型)。我不对文件中的脚手架代码进行任何更改。我只将文件名添加到侧边栏链接中的 asp-page 指令中。我运行网络应用程序并单击链接,我收到以下错误:

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>

将 PageModel 列入白名单:

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-core razor-pages


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 但这是 Razor,没有控制器...我相信这是由 asp-page 指令处理的,我无法控制,可以吗。关于命名空间的差异,我修复了但对它没有影响。
    • 是的,它不是MVC,即使它是基于MVC的。我的错。但是,可能是因为您在 WhitelistingModel 中返​​回 void 而不是模型本身?
    • 我相信它不能。这对我来说没有任何意义。它应该在空 OnGet 的情况下不显示任何内容,但由于索引有效,我尝试复制剃刀页面并查看它并重命名它(包括构造函数等),因此 OnGet 不再无效并且实际上包含工作代码,它仍然导致相同的错误消息。背景中有一些东西迫使它进入索引,但我不知道是什么以及在哪里,因为在我的其他项目中它可以正常工作,如我的步骤中所述。
    • 遗憾的是我没有其他想法。我没有足够注意你在谈论 Razor Pages 的事实。过去,我在使用混合 razor-MVC 时遇到过同样的问题,我想我可以帮助你。对不起,祝你好运。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2012-09-15
    相关资源
    最近更新 更多