Schnelle Frage ... Ich habe ein Projekt, das ich ein Basismodell in meine Layout-Seite laden. Auf jedem meiner anderen Modelle kann ich auf dieses BasePage
Modell verweisen, das gut funktioniert. Wenn ich jedoch eine Ansicht erzeuge, die ein anderes Modell auflistet, erhalte ich einen Kompilierungsfehler ...ASP.NET MVC 5 Modell in der Ausgabe
Um klarer zu erklären, mache ich einen Aufruf an eine Ansicht, die eine Liste der Klasseneinschreibung für einen Benutzer detailliert. Dieses Modell ist ein IEnumerable<Enrollment>
. Die Detailansicht funktioniert problemlos für jede Registrierung, aber wenn ich versuche, die vollständige Liste zu erhalten, erhalte ich einen Kompilierungsfehler, der mir sagt, dass das Wörterbuch einen Modelltyp von BasePage
benötigt.
Jede Klarheit darüber wäre großartig!
Tut mir leid, wenn das verwirrend ist, ich bin ziemlich neu in .NET ... vor allem ein Hintergrund in PHP.
Basepage Modell -
public abstract class BasePage
{
public BasePage()
{
public string prop { get; set; }
}
}
Enrollment Modell -
public class Enrollment : BasePage
{
#region modelsettings
private static PageDisplayItem PAGE_DISPLAYITEM = new PageDisplayItem()
{
PageNavigationType = PageNavigationType.FullNavigation,
HasSideNavigation = true,
HasPageControl = true,
HasTableHeader = true,
HasPageHeader = true,
IsBackgroundDark = false,
IsContentTransparent = false
};
#endregion
public Enrollment()
{
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
public Enrollment(bool isInitialize, string entityGUID = "")
{
// common props
var session = Helper.GetSession();
var planRepo = new PlanRepository();
var cmnRepo = new CommonRepository();
// set guid
if (!string.IsNullOrEmpty(entityGUID))
{
var entityRepo = new EntityRepository();
this.EntityItem = entityRepo.ReturnEntityOrUserItem(this.PageLanguageType, entityGUID);
if (this.EntityItem.EntityID == 0)
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
}
else
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
// init
if (isInitialize)
{
// page
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
}
#region modelprops
// BasePage properties
public EntityItem EntityItem { get; set; }
public bool IsCurrentPeriod { get; set; }
public PeriodItem DisplayPeriod { get; set; }
public List<PeriodItem> PeriodList { get; set; }
// Enrollment properties
public string Id { get; set; }
#endregion
}
Hier wird die _Layout.cshtml Seite ... schneide ich den Mut, der Kürze halber aus:
@model BasePage
@{
var m = @Model;
}
<!DOCTYPE html>
<html>
<head>
<title>@m.PageTabTitle @m.PageTabTitleExtension</title>
Hier ist das Benutzermodell, das ich erstellt habe, um die Details des Benutzermodells anzuzeigen, das einwandfrei funktioniert Basepage Modell aus dem User-Modell:
public class User : BasePage
{
#region modelsettings
private static PageDisplayItem PAGE_DISPLAYITEM = new PageDisplayItem()
{
PageNavigationType = PageNavigationType.FullNavigation,
HasSideNavigation = true,
HasPageControl = true,
HasTableHeader = true,
HasPageHeader = true,
IsBackgroundDark = false,
IsContentTransparent = false
};
#endregion
public User()
{
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
public User(bool isInitialize, string entityGUID = "")
{
// common props
var session = Helper.GetSession();
var planRepo = new PlanRepository();
var cmnRepo = new CommonRepository();
// set guid
if (!string.IsNullOrEmpty(entityGUID))
{
var entityRepo = new EntityRepository();
this.EntityItem = entityRepo.ReturnEntityOrUserItem(this.PageLanguageType, entityGUID);
if (this.EntityItem.EntityID == 0)
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
}
else
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
// init
if (isInitialize)
{
// page
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
}
#region modelprops
// BasePage props
public EntityItem EntityItem { get; set; }
public bool IsCurrentPeriod { get; set; }
public PeriodItem DisplayPeriod { get; set; }
public List<PeriodItem> PeriodList { get; set; }
// User props
public string Id { get; set; }
#endregion
}
Dies ist die .cshtml Seite für Benutzerdetails, die mit dem _Layout.cshtml funktioniert gut verwendet:
@model FD.Models.User
@{
ViewBag.Title = "User Profile";
Layout = "~/Views/Shared/_BaseLayout.cshtml";
var m = Model;
}
Und schließlich ist hier die .cshtml für . die Registrierungsliste, die die Benutzerklassen zeigt, dass sie in derzeit eingeschrieben sind Aus irgendeinem Grund, wenn ich die IEnumerable-Typ verwendet explodiert es während der Kompilierung:
@model IEnumerable<FD.Models.Enrollment>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
// Again, I cut out the rest for the sake of brevity.
Hier der Kompilierungsfehler, den ich im Browser erhalte:
Server Fehler in '/' Anwendung.
Der Artikel Modell in das Wörterbuch übergeben vom Typ ‚System.Collections.Generic.List`1 [FD.Models.Enrollment]‘, aber das Wörterbuch erfordert ein Modell Artikel vom Typ ‚FD.WWW.Models .BasePage '.
Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stack-Trace für mehr Informationen über den Fehler und wo es im Code entstanden ist.
Ausnahmedetails: System.InvalidOperationException: Das Element Modell in das Wörterbuch übergeben vom Typ ‚System.Collections.Generic.List`1 [FD.Models.Enrollment]‘, aber das Wörterbuch erfordert ein Modell Artikel vom Typ 'FD.WWW.Models.BasePage'.
Sind Sie in der Lage Proben keine Code, um Ihre Frage weiter zu erklären? –
Sie werden ein Beispiel im Code mit einem [mcve] zeigen – Nkosi