Быстрый вопрос ... У меня есть проект, который загружает базовую модель на мою страницу макета. На каждой из моих других моделей я могу ссылаться на эту модель BasePage
, которая отлично работает. Тем не менее, если я создаю представление, в котором приводится другая модель, я получаю ошибку компиляции ...ASP.NET MVC 5 Model in View issue
Чтобы яснее объяснить, я делаю вызов представления, в котором подробно описывается список классов для пользователей. Эта модель - IEnumerable<Enrollment>
. Подробное представление работает отлично для каждого зачисления, но когда я пытаюсь получить полный список, я получаю ошибку компиляции, которая говорит мне, что для словаря требуется тип модели BasePage
.
Никакой ясности в отношении этого было бы здорово!
Извините, если это сбивает с толку, я довольно новичок в .NET ... в основном, в PHP.
BasePage Модель -
public abstract class BasePage
{
public BasePage()
{
public string prop { get; set; }
}
}
Зачисление Модель -
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
}
Вот страница _Layout.cshtml ... Я вырезал внутренности для краткости:
@model BasePage
@{
var m = @Model;
}
<!DOCTYPE html>
<html>
<head>
<title>@m.PageTabTitle @m.PageTabTitleExtension</title>
Вот модель User, которую я создал, чтобы показать детали модели пользователя, которая отлично работает с BasePage модель от модели пользователя:
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
}
Это .cshtml страница для деталей пользователя, который отлично работает с _Layout.cshtml используется:
@model FD.Models.User
@{
ViewBag.Title = "User Profile";
Layout = "~/Views/Shared/_BaseLayout.cshtml";
var m = Model;
}
И, наконец, вот .cshtml для . список Зачисление, который показывает классы пользователя о том, что они в настоящее время зачислены в по некоторым причинам, когда я использовал IEnumerable типа взрывается во время компиляции:
@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.
Вот ошибка компиляции, которую я получаю в браузере:
Ошибка сервера в приложении «/».
Модели элемент передается в словарь типа «System.Collections.Generic.List`1 [FD.Models.Enrollment]», но это словаря требует модель пункта «FD.WWW.Models типа .BasePage.
Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения более информации об ошибке и ее месте в коде.
Сведения об исключении: System.InvalidOperationException: Элемент модели передается в словарь типа «System.Collections.Generic.List`1 [FD.Models.Enrollment]», но это словаря требует элемента модели типа «FD.WWW.Models.BasePage».
в состоянии предоставить какие-либо образцы кода для дальнейшего объяснения вашего вопроса Вы? –
Вам нужно будет показать пример кода с [mcve] – Nkosi