[英]Model is Filled on PartialAsync Call but Null on Partial View C# Razor ASPCORE
由於我正在使用的庫的限制,我正在創建部分 Model Async。 我調用部分並返回包含我的 progressModel 數據的 Model。 模型的 ProgressModel 在離開服務器時有數據,當它到達部分時,我得到一個 Object 參考 Null 錯誤。
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)
部分頁面 Model:
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。 ——尤依依
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.