Как исправить элемент модели, переданный в словарь типа error?



Я пытаюсь запустить свой первый ASP.NET приложение MVC. Я создал котроллер и вид. Данные берутся из базы данных. Однако, когда проект может работать, но когда я пытаюсь перейти на страницу клиента, я получаю следующую ошибку.




Элемент модели, передаваемый в словарь, имеет тип
- Система.Коллекции.Родовой.Список`1[Mvcapplication 3.Модели.Покупатель]',
но этот словарь требует элементов модели типа
'MvcApplication3.Модели.Клиент".




Я немного запутался здесь, так как ошибка говорит, что он имеет запрашивающий тип модели.



Трассировка стека - это




Трассировка Стека:



[InvalidOperationException: элемент модели, переданный в словарь
иметь тип
- Система.Коллекции.Родовой.Список 1[MvcApplication3.Models.Customer]',
but this dictionary requires a model item of type
'MvcApplication3.Models.Customer'.]

System.Web.Mvc.ViewDataDictionary
1.SetModel (значение объекта) +585211

Система.Сеть.В MVC.Экземпляр класса viewdatadictionary..чтор(экземпляр класса viewdatadictionary словарь)
+ 371 система.Сеть.В MVC.ViewPage 1.SetViewData(ViewDataDictionary viewData) +48 System.Web.Mvc.WebFormView.RenderViewPage(ViewContext
context, ViewPage page) +73

System.Web.Mvc.WebFormView.RenderView(ViewContext viewContext,
TextWriter writer, Object instance) +38

System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext
viewContext, TextWriter writer) +115

System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
+295 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext
controllerContext, ActionResult actionResult) +13

System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
+23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter
filter, ResultExecutingContext preContext, Func
1 Продолжение) +242

Система.Сеть.В MVC.c_ DisplayClass1c. b _19()
+21 Система.Сеть.В MVC.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext
controllerContext, IList 1 filters, ActionResult actionResult) +177

System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
+89 System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult
asyncResult) +102 System.Web.Mvc.Async.WrappedAsyncResult
1.Конец()
+ 57 система.Сеть.В MVC.Асинхронный.AsyncControllerActionInvoker.EndInvokeAction(Объекта Iasyncresult
asyncResult) +43

Система.Сеть.В MVC.c_ DisplayClass1d. b _18(IAsyncResult
asyncResult) +14

Система.Сеть.В MVC.Асинхронный.c_ DisplayClass4.b _3(IAsyncResult
АР) + 23 система.Сеть.В MVC.Асинхронный.WrappedAsyncResult 1.End() +62

System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult
ar) +23 System.Web.Mvc.Async.WrappedAsyncResult
1.End () +62

Система.Сеть.В MVC.Контроллер.EndExecute (IAsyncResult asyncResult) +47

Система.Сеть.В MVC.Контроллер.Система.Сеть.В MVC.Асинхронный.IAsyncController.EndExecute(IAsyncResult
asyncResult) +10

Система.Сеть.В MVC.c_ DisplayClass8.b _3(IAsyncResult
asyncResult) +25

Система.Сеть.В MVC.Асинхронный.c_ DisplayClass4.b _3(IAsyncResult
АР) + 23 система.Сеть.В MVC.Асинхронный.WrappedAsyncResult ' 1.End () +62

Система.Сеть.В MVC.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
+47 Система.Сеть.В MVC.MvcHandler.Система.Сеть.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
результат) +9

Система.Сеть.CallHandlerExecutionStep.Система.Сеть.HttpApplication.IExecutionStep.Выполнять()
+ 9514812 система.Сеть.HttpApplication.ExecuteStep (iexecutionstep step, Boolean& completedSynchronously) +155




Вот мой код контроллера.



namespace MvcApplication3.Controllers
{
public class CustomerController : Controller
{
//
// GET: /Customer/

public ActionResult Index()
{
Models.NorthwindDataContext nwd = new Models.NorthwindDataContext();
return View(nwd.Customers.ToList());
}

}
}


Вот вид



<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication3.Models.Customer>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Index</h2>

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="FeaturedContent" runat="server">
</asp:Content>

<asp:Content ID="Content4" ContentPlaceHolderID="ScriptsSection" runat="server">
</asp:Content>


Может ли кто-нибудь подсказать мне, как это исправить?
632   5  

5 ответов:

Вы пытаетесь передать коллекцию в представление, предназначенное для одного объекта.

Измените объявление вида на

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication3.Models.Customer>>

Что именно вас смущает? В файле aspx вы определили модель как клиента, но вместо этого передаете ему список.

Ожидаемая модель:

System.Web.Mvc.ViewPage<MvcApplication3.Models.Customer>

Ваши данные:

return View(nwd.Customers.ToList());

Очевидно несоответствие.

В вашем связанном представлении (то есть в файле .cshtml) Найдите объявление @model: ActionResult должен вернуть правильный экземпляр класса модели, например, если вы определили

@model Customer

Тогда ваш ActionResult должен быть типа Customer. Вы хотите вернуть список, поэтому вам нужно определить

@model IEnumerable<Customer>

В представлении.

Элемент модели, передаваемый в словарь, имеет тип

System.Collections.Generic.List1[MvcApplication3.Models.Customer]

Но этот словарь требует модельного элемента типа

MvcApplication3.Models.Customer

Несоответствие типов.

У меня был этот вопрос, и это была проблема модели представления. У меня был такой код в моем проекте MVC:

var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Author, AuthorViewModel>();
        });

        IMapper mapper = config.CreateMapper();
        var dest = mapper.Map<Author, AuthorViewModel>(author);

        return View("Form", dest);

Но видовая форма.у cshtml была неправильная модель:

@model ORMVC.Models.Author

Поэтому я изменил его на:

@model ORMVC.ViewModels.AuthorViewModel

Comments

    Ничего не найдено.