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.List
1[MvcApplication3.Models.Customer]', but this dictionary requires a model item of type 'MvcApplication3.Models.Customer'.]
1.SetModel (Objektwert) +585211
System.Web.Mvc.ViewDataDictionary
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
1 Fortsetzung) +242
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
System.Web.Mvc. <> C _ DisplayClass1c.b _ 19 () +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext ControllerContext, IList1 filters, ActionResult actionResult) +177
1.End () + .57)
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
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
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
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?
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>>
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.
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.
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.
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