Модель не принята представлением (ViewDataDictionary) и / или представлением, ожидающим модель, отличную от предполагаемой, почему? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть основное веб-приложение .net на основе бритвенных страниц. Я использую структуру _Layout с некоторыми частями и страницами, которые должны отображаться в @renderbody (). У меня есть частичное _Sidebar со ссылками, которые должны ссылаться на страницы, которые должны загружаться в разделе @renderbody (). Я добавляю ссылку, используя директиву asp-page, и создаю элемент страницы бритвы (view + pagemodel) в папке 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()
        {

        }
    }
}

1 Ответ

0 голосов
/ 10 апреля 2019

Когда вы нажимаете на ссылку, ваш запрос отправляется на ваш контроллер, чтобы получить модель и ее данные.Затем он пытается привязать эту модель к представлению.

Вы не предоставили код контроллера, но он показывает, что действие контроллера возвращает неправильный тип модели.

Вы ограничили свое представлениеиспользовать модель типа @ model NN.NetworkManagementPortal.Pages.WhitelistingModel , но ваш контроллер пытается предоставить модели типа DeliveryPlanner.Pages.IndexModel для представления.

Дважды проверьте действие вашего контроллера, проблема должна быть решена путем возврата WhitelistingModel вместо IndexModel .

...