我在尝试渲染 Razor 组件时遇到问题,我得到一个
NullReferenceException
。
我有一个组件
NewsCard
,它代表一张简单的卡片,其中包含有关新闻条目的摘要:
@using Web.Backend.Models
@code {
[Parameter]
public News? NewsData { get; set; }
}
<a href="/news/@NewsData?.Id">
<div class="news-card">
<img src="@NewsData?.TitleImage.ResolveObjectUri()"/>
<div class="news-card-data">
<div class="news-card-header">
<h3>@NewsData?.Title</h3>
<div class="news-card-header-info">
<p class="news-card-posted-by">@string.Format("{0} {1}", NewsData?.PostedBy.LastName, NewsData.PostedBy.FirstName)</p>
<p class="news-card-posted-at">@NewsData?.PostedAt</p>
</div>
</div>
<p>@NewsData?.Description</p>
</div>
</div>
</a>
我在其他组件中很好地使用了这个组件
<NewsCard NewsData="news"/>
但是当我尝试在这样的页面中使用这个组件时
<component type="typeof(NewsCard)" render-mode="ServerPrerendered" params-NewsData="news"/>
或者像这样
await Html.RenderComponentAsync<NewsCard>(RenderMode.ServerPrerendered, new { NewsData = news });
我得到一个
NullReferenceException
。为什么?当我在调试器中查看时,news
变量有一个对象。
我试图理解为什么它不起作用,而且为什么我不能像在组件中一样使用相同的语法:
<NewsCard NewsData="news"/>
谢谢
所以我已经弄清楚了,我忘记在从数据库检索的新闻中填充其他字段。我添加了这个:
foreach (News newsPost in news)
{
dbContext.Entry(newsPost).Reference(p => p.PostedBy).Load();
dbContext.Entry(newsPost).Reference(p => p.TitleImage).Load();
}
它解决了一个问题。