Asp.net core mvc 使用DB数据从填充的selectlist返回空值

Asp.net core mvc 使用DB数据从填充的selectlist返回空值,asp.net-core-mvc,ef-core-2.0,Asp.net Core Mvc,Ef Core 2.0,我正在实施asp.net核心MVC项目。在名为APIApplication的控制器类Create method中,我有3个选择列表,其项应该从名为APIApplicantHistory的表中填充。我的模型、创建方法和视图的实现如下所示: using System.Collections.Generic; namespace CSDDashboard.Models { public partial class Apiapplicant {

我正在实施asp.net核心MVC项目。在名为APIApplication的控制器类Create method中,我有3个选择列表,其项应该从名为APIApplicantHistory的表中填充。我的模型、创建方法和视图的实现如下所示:

    using System.Collections.Generic;

      namespace CSDDashboard.Models
     {
      public partial class Apiapplicant
      {
        public Apiapplicant()
        {
            ApiApplicantHistory = new HashSet<ApiApplicantHistory>();
        }

        public int Id { get; set; }
        public string ApiRequestDate { get; set; }
        public int? ApiRequestNo { get; set; }
        public int? Apiid { get; set; }
        public int? ApplicantId { get; set; }
        public int? GateId { get; set; }
        public string NocRequestDate { get; set; }
        public string NocRequestNo { get; set; }
        public string Url { get; set; }
        public string Description { get; set; }
        public bool? IsDeleted { get; set; }

        public virtual Api Api { get; set; }
        public virtual Applicant Applicant { get; set; }
        public virtual Gate Gate { get; set; }
        public virtual ICollection<ApiApplicantHistory> ApiApplicantHistory { get; set; }
    }
}

     using System;
     using System.Collections.Generic;

     namespace CSDDashboard.Models
     {
     public partial class ApiApplicantHistory
     {
        public int Id { get; set; }
        public int? ApiApplicantId { get; set; }
        public string Date { get; set; }
        public int? SentResponseType { get; set; }
        public int? UnconfirmedReason { get; set; }
        public int LastReqStatus { get; set; }
        public string Description { get; set; }

           public virtual Apiapplicant ApiApplicant { get; set; }
           public virtual EntityType LastReqStatusNavigation { get; set; }
           public virtual EntityType SentResponseTypeNavigation { get; set; }
           public virtual EntityType UnconfirmedReasonNavigation { get; set; }
        }
       }


       using System;
       using System.Collections.Generic;

       namespace CSDDashboard.Models
       {
        public partial class EntityType
       {
        public EntityType()
        {
            ApiApplicantHistoryLastReqStatusNavigation = new HashSet<ApiApplicantHistory>();
            ApiApplicantHistorySentResponseTypeNavigation = new HashSet<ApiApplicantHistory>();
            ApiApplicantHistoryUnconfirmedReasonNavigation = new HashSet<ApiApplicantHistory>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string EntityKey { get; set; }

        public virtual ICollection<ApiApplicantHistory> ApiApplicantHistoryLastReqStatusNavigation { get; set; }
        public virtual ICollection<ApiApplicantHistory> ApiApplicantHistorySentResponseTypeNavigation { get; set; }
        public virtual ICollection<ApiApplicantHistory> ApiApplicantHistoryUnconfirmedReasonNavigation { get; set; }

    }
}


      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Threading.Tasks;

      namespace CSDDashboard.Models
      {
      public class APIApplicantViewModel
      {
            public Apiapplicant apiApplicantvm { get; set; }

             public ApiApplicantHistory apiApplicantHistoryvm { get; set; }
       }
      }


       public class ApiapplicantsController : Controller
       {
        private readonly CSSDDashboardContext _context;

        public ApiapplicantsController(CSSDDashboardContext context)
        {
            _context = context;
        }

       public IActionResult Create()
        {

            ViewData["sentResponseType"] = new SelectList(_context.EntityType.Where(g => g.EntityKey == "sentResponseType").ToList(), "ID", "name");
            ViewData["unconfirmedReason"] = new SelectList(_context.EntityType.Where(g => g.EntityKey == "unconfirmedReason").ToList(), "ID", "name");
            ViewData["lastReqStatus"] = new SelectList(_context.EntityType.Where(g => g.EntityKey == "lastRequestStatus").ToList(), "ID", "name");

            return View();

        }
       }
使用System.Collections.Generic;
命名空间csdashboard.Models
{
公共部分类别申请人
{
公共申请人()
{
ApiApplicantHistory=新哈希集();
}
公共int Id{get;set;}
公共字符串APIRestDate{get;set;}
公共int?ApiRequestNo{get;set;}
公共int?apid{get;set;}
公共int?applicationId{get;set;}
公共int?GateId{get;set;}
公共字符串noclestdate{get;set;}
公共字符串nocrestno{get;set;}
公共字符串Url{get;set;}
公共字符串说明{get;set;}
公共布尔?被删除{get;set;}
公共虚拟Api{get;set;}
公共虚拟申请人{get;set;}
公共虚拟门{get;set;}
公共虚拟ICollection ApiApplicantHistory{get;set;}
}
}
使用制度;
使用System.Collections.Generic;
命名空间csdashboard.Models
{
公共部分类应用历史
{
公共int Id{get;set;}
公共int?ApiApplicantId{get;set;}
公共字符串日期{get;set;}
公共int?SentResponseType{get;set;}
public int?未确认原因{get;set;}
public int LastReqStatus{get;set;}
公共字符串说明{get;set;}
公共虚拟APIapplicator APIapplicator{get;set;}
公共虚拟EntityType LastReqStatusNavigation{get;set;}
公共虚拟实体类型SentResponseTypePenaviation{get;set;}
公共虚拟EntityType UnconfirmedReasonNavigation{get;set;}
}
}
使用制度;
使用System.Collections.Generic;
命名空间csdashboard.Models
{
公共部分类EntityType
{
公共实体类型()
{
ApiApplicantHistoryLastReqStatusNavigation=新哈希集();
APIApplicantHistorySentResponseTypePenavigation=新哈希集();
APIApplicantHistoryUnconfirmdreasonAvigation=新哈希集();
}
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串EntityKey{get;set;}
公共虚拟ICollection APIApplicationAnthistoryStreqStatusNavigation{get;set;}
公共虚拟ICollection APIApplicationsHistorySentresponseTypePenaviation{get;set;}
公共虚拟ICollection APIapplicationHistoryUnconfirmedAresonAvigation{get;set;}
}
}
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
命名空间csdashboard.Models
{
公共类应用程序视图模型
{
公共APIapplicationVM{get;set;}
公共APIApplicationHistory APIApplicationHistoryVM{get;set;}
}
}
公共类API应用程序控制器:控制器
{
私有只读CSSDDashboardContext\u context;
公共应用程序控制器(CSSDDashboardContext)
{
_上下文=上下文;
}
public IActionResult Create()
{
ViewData[“sentResponseType”]=new SelectList(_context.EntityType.Where(g=>g.EntityKey==“sentResponseType”).ToList(),“ID”,“name”);
ViewData[“unconfirmedReason”]=新建选择列表(_context.EntityType.Where(g=>g.EntityKey==“unconfirmedReason”).ToList(),“ID”,“name”);
ViewData[“lastReqStatus”]=新建选择列表(_context.EntityType.Where(g=>g.EntityKey==“lastRequestStatus”).ToList(),“ID”,“name”);
返回视图();
}
}
以及创建视图实现的一部分:

     @model CSDDashboard.Models.APIApplicantViewModel

       @{
       ViewData["Title"] = "create";
       }
        <div class="row">
         <div class="col-md-4">
          <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
          <div class="form-group">
                <label asp-for="apiApplicantvm.GateId" class="control-label"></label>
                <select asp-for="apiApplicantvm.GateId" class="form-control" asp-items="ViewBag.GateId"></select>
            </div>
        <div class="form-group">
    <label asp-for="apiApplicantHistoryvm.SentResponseType" class="control-label"></label>
        <select asp-for="apiApplicantHistoryvm.SentResponseType" class="form-control" asp-items="ViewBag.sentResponseType"></select>
        </div>
       <div class="form-group">
        <label asp-for="apiApplicantHistoryvm.UnconfirmedReason" class="control-label"></label>
        <select asp-for="apiApplicantHistoryvm.UnconfirmedReason" class="form-control" asp-items="ViewBag.unconfirmedReason"></select>

       </div>
        <div class="form-group">
            <label asp-for="apiApplicantHistoryvm.LastReqStatus" class="control-label"></label>
            <select asp-for="apiApplicantHistoryvm.LastReqStatus" class="form-control" asp-items="ViewBag.lastReqStatus"></select>
        </div>
<div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
        </form>
       </div>
      </div>

       <div>
       <a asp-action="Index">Back</a>
       </div>

     @section Scripts {
      @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    }
@model csdashboard.Models.apapplicationViewModel
@{
ViewData[“标题”]=“创建”;
}
返回
@节脚本{
@{wait Html.RenderPartialAsync(“_validationScript”);}
}
在create method中,所有viewData都填充了正确的相关数据,但问题存在于create view中,在运行项目后,create page中显示了如下错误:

处理请求时发生未处理的异常。 NullReferenceException:对象引用未设置为对象的实例


调试完代码后,我了解到在create视图中,apipapplicationvm不是null,但apipapplicationshistoryvm返回null,而上述错误正是由于此。如果有人能告诉我如何解决这个问题,我将不胜感激。

我希望您将EF core用作ORM,因为您使用的是
Asp.net core

EF core
中加载相关数据

它可以通过两种方式完成,或者延迟加载

快速加载


\u context.EntityType.Where(g=>g.EntityKey==“sentResponseType”)
.Include(x=>x.apisapplicationAthistorylastreqStatusNavigation).ToList()

延迟加载 论你的情态创造

受保护的覆盖无效
OnConfiguration(DbContextOptionsBuilderOptionsBuilder)=>optionsBuilder.UseLazyLoadingProxies().UseSqlServer(myConnectionString)

在核心MVC项目的startup.cs上 惰性负载