c# - 模型在 PartialAsync 调用上填充,但在部分视图 C# Razor ASPCORE 上为空
问题描述
由于我正在使用的库的限制,我正在创建部分模型异步。我调用部分并返回一个包含我的progressModel 数据的模型。模型的 ProgressModel 在离开服务器时有数据,当它到达部分时,我得到一个对象引用空错误。
Error:
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=NGL.Dashboard.Razor.Views
StackTrace:
at
NGL.Dashboard.Razor.Pages.Pages__WorkflowProgressBarPartial.get_Model()
部分注射:
@await Html.PartialAsync("/Pages/_WorkflowProgressBarPartial.cshtml",
PartialModel.OnPostUseMyClassAsync(log, mapper, options, workflowInstanceId).Result)
部分页面模型:
public class _WorkflowProgressBarPartialModel : PageModel
{
[BindProperty]
public ProgressModel progressModel { get; set; }
// https://blog.stephencleary.com/2013/01/async-oop-2-constructors.html //
public sealed class ProgressModel {
public WorkflowInstanceController WIC;
public IWorkflowInstanceStore workflowInstanceStore;
public IWorkflowDefinitionStore workflowDefinitionStore;
public ElsaDashboardOptions _options { get; }
public INotifier notifier;
private ILogger _log;
private IMapper _mapper;
[BindProperty]
public string WorkFlowInstanceId { get; set; }
[BindProperty]
public WorkflowInstanceDetailsModel WorkflowDetailsModel { get; set; }
private ProgressModel(ILogger log, IMapper mapper, IOptions<ElsaDashboardOptions> options, string workFlowInstanceId)
{
_log = log;
_mapper = mapper;
WorkFlowInstanceId = workFlowInstanceId;
WorkflowDataAccess da = new WorkflowDataAccess(_log);
ElsaContext _elsaContext = da.GetElsaContext();
workflowInstanceStore = new EntityFrameworkCoreWorkflowInstanceStore(_elsaContext, _mapper);
workflowDefinitionStore = new EntityFrameworkCoreWorkflowDefinitionStore(_elsaContext, _mapper);
notifier = new Notifier();
WIC = new WorkflowInstanceController(
workflowInstanceStore,
workflowDefinitionStore,
options,
notifier);
}
private async Task<ProgressModel> InitializeAsync(string workFlowInstanceId)
{
WorkflowDetailsModel = await WfDetailsModel(workFlowInstanceId);
return this;
}
public static Task<ProgressModel> CreateAsync(ILogger log, IMapper mapper, IOptions<ElsaDashboardOptions> options, string workFlowInstanceId)
{
var ret = new ProgressModel(log, mapper, options, workFlowInstanceId);
return ret.InitializeAsync(workFlowInstanceId);
}
public async Task<WorkflowInstanceDetailsModel> WfDetailsModel(string workFlowInstanceId)
{
System.Threading.CancellationToken cancellationToken = default;
WorkflowInstanceDetailsModel DetailsModel = (WorkflowInstanceDetailsModel)await WIC.DetailsModel(workFlowInstanceId, cancellationToken);
WorkflowDetailsModel = DetailsModel;
return DetailsModel;
}
}
public async Task<_WorkflowProgressBarPartialModel> OnPostUseMyClassAsync(ILogger log, IMapper mapper, IOptions<ElsaDashboardOptions> options, string workFlowInstanceId)
{
_WorkflowProgressBarPartialModel model = new _WorkflowProgressBarPartialModel();
ProgressModel instance = await ProgressModel.CreateAsync(log, mapper, options, workFlowInstanceId);
model.progressModel = instance;
return model;
}
}
部分的:
@Page
@model NGL.Dashboard.Razor.Pages._WorkflowProgressBarPartialModel
@using System.Globalization
<div class="table-responsive">
<table class="table align-items-center table-flush">
<thead class="thead-light">
<tr>
<th scope="col">Timestamp</th>
<th scope="col">Activity ID</th>
<th scope="col">Message</th>
</tr>
</thead>
<tbody>
@if (Model != null)
{
foreach (var item in Model.progressModel)
{
var statusClass = item.Faulted ? "bg-warning" : "bg- success";
var message = item.Faulted ? item.Message : "";
<tr data-activity-id="@item.ActivityId">
<td>
<span class="badge badge-dot mr-4">
<i class=@statusClass></i>
</span>
@item.Timestamp.ToString("g", CultureInfo.CurrentCulture)
</td>
<td>@item.ActivityId</td>
<td>@message</td>
</tr>
}
}
</tbody>
</table>
.
解决方案
我不得不删除@Page,现在它可以工作了!
如果要使用局部视图,可以参考官方文档,局部视图在视图中没有@page。这样就不会使用xx.cshtml.cs。——尤依依
推荐阅读
- react-native - Implementing custom bottom tab bar curved outcrop in React native
- r - 对列表中的每个矩阵使用 SVD
- react-native - Getting error when installing react native vector icons
- python - Python多处理:如果孩子关闭,如何关闭父母?
- javascript - 返回最短的单词
- android - 位图未在 canvas-android 上绘制
- html - 如何在父元素剪辑路径清除的区域顶部显示子 HTML 元素?
- swift - 在 ObservableObject 中调用多个函数
- python - Python pandas timedelta64 fillna
- amazon-web-services - AWS SNS OTP 电子邮件