C# 视图问题中的ASP.NET MVC 5模型
快速提问。。。我有一个项目,我加载到我的布局页面的基础模型。在我的其他每一个模型上,我都能参考这个C# 视图问题中的ASP.NET MVC 5模型,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,快速提问。。。我有一个项目,我加载到我的布局页面的基础模型。在我的其他每一个模型上,我都能参考这个BasePage模型,它工作得很好。然而,如果我创建一个列出不同模型的视图,我会得到一个编译错误 为了更清楚地解释,我调用了一个视图,该视图详细列出了用户的班级注册列表。此模型是一个IEnumerable。“详细信息”视图对于每个注册都可以正常工作,但是当我尝试获取完整列表时,会出现一个编译错误,告诉我字典需要一个BasePage的模型类型 任何关于这一点的澄清都是非常好的 抱歉,如果这让人困惑,我
BasePage
模型,它工作得很好。然而,如果我创建一个列出不同模型的视图,我会得到一个编译错误
为了更清楚地解释,我调用了一个视图,该视图详细列出了用户的班级注册列表。此模型是一个IEnumerable
。“详细信息”视图对于每个注册都可以正常工作,但是当我尝试获取完整列表时,会出现一个编译错误,告诉我字典需要一个BasePage
的模型类型
任何关于这一点的澄清都是非常好的
抱歉,如果这让人困惑,我对.NET还很陌生。。。主要是PHP背景
基本页模型-
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
}
最后,这里是注册列表的.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.
@model IEnumerable
@ActionLink(“新建”、“创建”)
//为了简洁起见,我再次删去了其余部分。
以下是我在浏览器中遇到的编译错误:
“/”应用程序中出现服务器错误
传递到字典中的模型项的类型为
'System.Collections.Generic.List'1[FD.Models.Enrollment]',但此
字典需要“FD.WWW.Models.BasePage”类型的模型项
描述:在执行过程中发生未处理的异常
当前的web请求。请查看堆栈跟踪以了解更多信息
有关错误的信息及其在代码中的来源
异常详细信息:System.InvalidOperationException:模型项
传入字典的类型为
'System.Collections.Generic.List'1[FD.Models.Enrollment]',但此
字典需要“FD.WWW.Models.BasePage”类型的模型项
假设您的_布局页面也被其他页面引用,那么问题是您已经在_布局中定义了类型为
BasePage
的模型,然后在注册页面中将其更改为IEnumerable
,这将导致一个问题,因为它需要从BasePage
派生的模型在_布局中声明,当您将模型从控制器传递到视图时,该布局将优先。而FD.Models.Enrollment
源于BasePage
,IEnumerable
则不是
用户页面仍然有效的原因是其modelFD.Models.User
源于FD.WWW.Models.BasePage
你也可以
BasePage
模型BasePage
作为其模型的布局
@{Layout=“~/Views/Shared/\u SomeOtherLayout.cshtml”}
@模型IEnumerable
@ActionLink(“新建”、“创建”)
您是否能够提供任何代码示例来进一步解释您的问题?您必须使用
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
}
@model FD.Models.User
@{
ViewBag.Title = "User Profile";
Layout = "~/Views/Shared/_BaseLayout.cshtml";
var m = Model;
}
@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.