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
则不是

用户页面仍然有效的原因是其model
FD.Models.User
源于
FD.WWW.Models.BasePage

你也可以

  • 从_Layout.cshtml中删除
    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.