【问题标题】:.NET 6 Razor Page Partial tag helper - Model throws 'System.NullReferenceException'.NET 6 Razor 页面部分标记助手 - 模型抛出 \'System.NullReferenceException\'
【发布时间】:2022-11-24 08:23:49
【问题描述】:

我有一个非常简单的局部视图:

@page
@using IlgQueries.Common.Interfaces;
@model IlgQueries.Common.Interfaces.ProsByArea;

<ul class="pros-list">
    @foreach (ProByGeoAreaData pro in Model.Pros)
    {
        <li>@pro.FullName - @Model.ProCategoryName - <strong>@pro.City</strong> @pro.PostalCode</li>
        <li>@pro.FullName - @Model.ProCategoryName - <strong>@pro.City</strong> @pro.PostalCode</li>
    }
</ul>

我在我的索引.cshtml剃须刀页面:


<div class="col-12">
    <h2>@Model.ProsByRegion.TotalItems @(Model.ProsByRegion.ProCategoryName) some text @(Model.ProsByRegion.TotalItems != 1 ? "s" : "") some text</h2>
    
    <partial name="Pros/Shared/_ProsList" for="ProsByRegion"/>
</div>

但是我得到NullReferenceException局部视图:

抛出异常:System.Private.CoreLib.dll 中的“System.NullReferenceException”

这里:

@foreach (ProByGeoAreaData pro in Model.Pros)
{
   ...code
}

我的索引页模型中确实有一个值(Model.ProsByRegion.Pros 不为空)。

这是索引模型:

public class IndexModel : IlgPageModelBase
{
    public ProsByArea ProsByRegion { get; private set; } = default!;
}

还有ProsByArea


public record ProsByArea {
  public ProsByArea(string proCategoryName,
   string areaName, uint actualPageNum, uint totalItems, uint totalPages) 
{
    
    if (string.IsNullOrWhiteSpace(proCategoryName))
      throw new ArgumentNullException(nameof(proCategoryName));

    if (string.IsNullOrWhiteSpace(areaName))
      throw new ArgumentNullException(nameof(areaName));

    ProCategoryName = proCategoryName;
    AreaName = areaName;
    Pros = new List < ProByGeoAreaData > (30);
    ActualPageNum = actualPageNum;
    TotalItems = totalItems;
    TotalPages = totalPages;
    
  }

  public uint ActualPageNum { get; }
  public string AreaName { get; }

  public string ProCategoryName { get; }

  public IList<ProByGeoAreaData> Pros { get; internal set; }

  public uint TotalItems { get; }
  public uint TotalPages { get; }

}

为什么我会得到 NRE?

更新

我打开了一个详细的异常视图,这是 TargetSite 属性值:

{IlgQueries.Common.Interfaces.ProsByArea get_Model()}

为什么get_Model()我自己的模型类(实际上是记录)?

更新 2

我将它转换为 ViewComponent - 效果很好!

【问题讨论】:

    标签: c# asp.net-core razor-pages


    【解决方案1】:
    @page
    @using IlgQueries.Common.Interfaces;
    @model IlgQueries.Common.Interfaces.ProsByArea;
    
    <ul class="pros-list">
        @foreach (ProByGeoAreaData pro in Model.Pros)
        {
            <li>@pro.FullName - @Model.ProCategoryName - <strong>@pro.City</strong> @pro.PostalCode</li>
            <li>@pro.FullName - @Model.ProCategoryName - <strong>@pro.City</strong> @pro.PostalCode</li>
        }
    </ul>
    

    “get_Model()”异常与上述部分视图中的代码有关,您正在混合 Razor Pages 和部分视图,在部分视图中,无需添加 @page 指令,尝试删除 @ 987654325@ 指令从局部视图并在 Index.cshtml.cs OnGet 方法中设置 Pros 的值。像这样:

        public void OnGet()
        {
            ProsByRegion = new ProsByArea("C1", "Area A", 12, 10, 5)
            {
    
                Pros = new List<ProByGeoAreaData>()
                {
                    new ProByGeoAreaData(){ ID=101, FullName="F1", City="C1", PostalCode="PC1" },
                    new ProByGeoAreaData(){ ID=102, FullName="F2", City="C2", PostalCode="PC2" },
    
                }
            };
        }
    

    像这样的局部视图(将应用程序和模型引用更改为您的):

     @model Core6RazorPage.Data.ProsByArea;
    
    <h2>This is the partial view</h2> 
    @if (Model.Pros!=null && Model.Pros.Count > 0)
    {
        <ul class="pros-list">
            @foreach (ProByGeoAreaData pro in Model.Pros)
            {
                <li>@pro.FullName - @Model.ProCategoryName - <strong>@pro.City</strong> @pro.PostalCode</li>
            }
        </ul>
    }
    

    结果是这样的:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-23
      • 2019-05-30
      • 2018-06-21
      • 1970-01-01
      • 2022-08-15
      • 2018-12-20
      • 2021-02-04
      • 2020-05-06
      相关资源
      最近更新 更多