【问题标题】:Error System.NullReferenceException when try to view linked model [duplicate]尝试查看链接模型时出错 System.NullReferenceException [重复]
【发布时间】:2021-05-24 15:13:18
【问题描述】:

我有 2 个模型。

public class LS : BaseDomainModel
{
    [Required]
    public string LsCompanyName { get; set; }

}

public class LSName : BaseDomainModel
{
    [Required]
    public string SurveyorName { get; set; }

    [Required]
    public int LSId { get; set; }
    public virtual LS LS { get; set; }

}

在我的剃须刀页面中,我尝试查看数据:

@if (LsnModel == null) 
{
  <div class="alert alert-info">Loading list..</div>
} 
else 
{
  @foreach (var Item in LsnModel)
   {
     <div>@Item.SurveyorName   @Item.LS.LsCompanyName  </br></div>
   }
}

@code
{

private List<LSName> LsnModel;

protected async override Task OnInitializedAsync()
{
    LsnModel = await _client.GetFromJsonAsync<List<LSName>>("api/lsnames");
}
}

如果我从 razor 代码中删除 @Item.LS.LsCompanyName,它运行良好。否则,这个错误就出来了..

crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
  Unhandled exception rendering component: Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at WebApp.Client.Pages.LSName.Index.BuildRenderTree(RenderTreeBuilder __builder)
at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder)
at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, 
RenderFragment renderFragment) at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch
(RenderQueueEntry renderQueueEntry) at Microsoft.AspNetCore.Components.RenderTree.Renderer
.ProcessRenderQueue()

两个模型中都有数据,LSName.LSId = LS.Id

BaseDomainModel:

    public abstract class BaseDomainModel
{
    [Key]
    public int Id { get; set; }

    public string CreatedBy { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public Nullable<DateTime> CreatedDate { get; set; }

    public string UpdatedBy { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public Nullable<DateTime> UpdatedDate { get; set; }
}

我应该在哪里检查是什么原因造成的?

【问题讨论】:

  • Item.LS 为空。你确定你也在拉所有相关的记录吗?
  • 使用@Item.LS.LsCompanyName??"No Company Name",这样就可以看到LsCompanyName的所有值为null的人
  • @Item.LS?.LsCompanyName ?? "" 将停止崩溃。您的 LS 财产是null
  • 我在控制器中发现了问题。我没有在我的 LSName Get 方法中声明 LS 模型。 var includes = new List { "LS" }; var lsname = await _unitOfWork.LSNames.GetAll(包括:包括); .谢谢大家。

标签: c# api asp.net-core blazor


【解决方案1】:

确保将 LS 项目设置为新实例。然后,您将有一个空字符串,而不是一个空字符串。 @Hassan 也提供了一个不错的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2012-01-15
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多