it-swarm.com.de

Problembehebung Das in das Wörterbuch übergebene Modellelement weist einen Typfehler auf.

Ich versuche, meine erste ASP.NET-MVC-Anwendung auszuführen. Ich habe einen Cotroller und eine Ansicht erstellt. Daten werden aus der Datenbank übernommen. Wenn jedoch ein Projekt ausgeführt werden kann, aber wenn ich versuche, auf der Kundenseite zu navigieren, erhalte ich folgende Fehlermeldung.

Das in das Wörterbuch übergebene Modellelement hat den Typ 'System.Collections.Generic.List`1 [MvcApplication3.Models.Customer]', Dieses Wörterbuch erfordert jedoch ein Modellelement vom Typ 'MvcApplication3.Models.Customer'.

Ich bin hier etwas verwirrt, da laut Fehler der Modelltyp angefordert wurde.

Stack-Trace ist 

Stapelverfolgung: 

[InvalidOperationException: Das Modellelement, das an das Wörterbuch übergeben wurde ist vom Typ 'System.Collections.Generic.List1[MvcApplication3.Models.Customer]', but this dictionary requires a model item of type 'MvcApplication3.Models.Customer'.]
System.Web.Mvc.ViewDataDictionary
1.SetModel (Objektwert) +585211
System.Web.Mvc.ViewDataDictionary..ctor (ViewDataDictionary-Wörterbuch) +371 System.Web.Mvc.ViewPage1.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 Fortsetzung) +242
System.Web.Mvc. <> C _ DisplayClass1c.b _ 19 () +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext ControllerContext, IList1 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.End () + .57)
System.Web.Mvc. <> C _ DisplayClass1d.b _ 18 (IAsyncResult AsyncResult) +14
System.Web.Mvc.Async. <> C _ DisplayClass4.b _ 3 (IAsyncResult Ar) +23 System.Web.Mvc.Async.WrappedAsyncResult1.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
System.Web.Mvc.Controller.EndExecute (IAsyncResult asyncResult) +47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute (IAsyncResult AsyncResult) +10
System.Web.Mvc. <> C _ DisplayClass8.b _ 3 (IAsyncResult AsyncResult) +25
System.Web.Mvc.Async. <> C _ DisplayClass4.b _ 3 (IAsyncResult Ar) +23 System.Web.Mvc.Async.WrappedAsyncResult`1.End () +62
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +47 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (IAsyncResult Ergebnis) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +9514812 System.Web.HttpApplication.ExecuteStep (Schritt IExecutionStep, Boolean und completeSynchronously) +155

Hier ist mein Controller-Code.

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

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

    }
}

Hier ist die Aussicht

<%@ 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>

Kann mir jemand einen Hinweis geben, um das Problem zu beheben?

14
newday

Sie versuchen, eine Sammlung an eine Ansicht zu übergeben, die für ein einzelnes Objekt entworfen wurde.

Ändern Sie Ihre Sichtdeklaration in

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

7
D Stanley

Was genau verwirrt dich? In Ihrer ASPX-Datei haben Sie das Modell als Kunden definiert, aber Sie übergeben stattdessen eine Liste.

Erwartetes Modell:

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

Deine Daten:

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

Offensichtlich ein Missverhältnis.

3
walther

Suchen Sie in Ihrer bezogenen Ansicht (d. H. In der Datei .cshtml) nach der Deklaration @model: Die Variable ActionResult muss die richtige Instanz der Modellklasse zurückgeben, z. wenn du definiert hast

@model Customer

dann muss Ihr ActionResult vom Typ Customer..__ sein. Sie möchten eine Liste zurückgeben, daher müssen Sie sie definieren

@model IEnumerable<Customer>

in der Ansicht.

1
Matt

Das in das Wörterbuch übergebene Modellelement ist vom Typ

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

dieses Wörterbuch erfordert jedoch ein Modellelement des Typs

MvcApplication3.Models.Kunde

Typenkonflikt.

0
Matt Webber

Ich hatte dieses Problem und es war ein Problem des Modells der Ansicht. Ich hatte diesen Code in meinem MVC-Projekt:

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

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

        return View("Form", dest);

aber die View Form.cshtml hatte das falsche Modell:

@model ORMVC.Models.Author

Also habe ich es geändert in:

@model ORMVC.ViewModels.AuthorViewModel
0
nahuelmisc