我正在开发一个按钮设置,它可以打开一个炫酷的模式,允许用户输入处理请求的小时和分钟,以及添加评论。我开始使用 Blazored.Modal nuget 包,[CascadingParameter] 用于关闭或提交模式中的数据。当通过一个断点查看时,我发现
[CascadingParameter] BlazoredModalInstance BlazoredModal { get; 放; }
当我尝试以父对象的形式传递数据时返回 NULL。我在下面附上了我的问题代码。感谢您的帮助和提前回复。
@using Logscan_Request.Shared
@using Logscan_Request.Pages.Modal
@using Logscan_Request.Shared.Tabs
<div class="card-header" @onclick="Expand">
<div class="row">
<div class="col">
<label><b>ORI:@RequestItem.ORI</b></label>
</div>
<div class="col">
<label><b>Agency Name:@RequestItem.AGENCY_NAME</b></label>
</div>
<div class="col">
<label><b>Requestor:@RequestItem.Request_LName, @RequestItem.Request_FName</b></label>
</div>
<div class="col">
<label><b>Date Submitted:@RequestItem.AddWhen</b></label>
</div>
<div class="col">
@if (RequestItem.Priority.Equals("Urgent"))
{
<label><b>Priority:
<span class="badge badge-danger">
<span class="oi oi-warning"></span> @RequestItem.Priority
</span>
</b></label>
}
else
{
<label>
<b>
Priority:
<span class="badge badge-success">
<span class="oi oi-bell"></span> @RequestItem.Priority
</span>
</b>
</label>
}
</div>
@if (RequestItem.Completed == 0)
{
<div class="col">
<span class="badge badge-warning">
<span class="oi oi-plus"></span> New Logscan
</span>
</div>
}
else
{
<div class="col">
<span class="badge badge-success">
<span class="oi oi-check"></span> Completed
</span>
</div>
}
</div>
</div>
<div class="card p-3 shadow @collapsed">
<div class="card p-3 shadow">
<div class="card-header bg-dark">
<label class="text-white">Agency Information</label>
</div>
<div class="card-body border-light">
<div class="row">
<div class="col">
<label>Agency Name: </label>
<p>@RequestItem.AGENCY_NAME</p>
</div>
<div class="col">
<label>ORI:</label>
<p>@RequestItem.ORI</p>
</div>
<div class="col">
<label>Address:</label>
<p>@RequestItem.ADDRESS</p>
</div>
</div>
</div>
</div>
<br />
<div class="card p-3 shadow">
<div class="card-header bg-dark">
<label class="text-white">Supervisor Information</label>
</div>
<div class="card-body">
<div class="row">
@if (string.IsNullOrEmpty(RequestItem.Supervisor_FName) && string.IsNullOrEmpty(RequestItem.Supervisor_LName))
{
}
else
{
<div class="col">
<label>Name: </label>
<p>@RequestItem.Supervisor_LName, @RequestItem.Supervisor_FName</p>
</div>
}
<div class="col">
<label>Phone:</label>
<p>@RequestItem.Supervisor_Phone</p>
</div>
<div class="col">
<label>Cell Phone:</label>
<p>@RequestItem.Cell_Phone</p>
</div>
@if (String.IsNullOrEmpty(RequestItem.Fax_Number))
{
}
else
{
<div class="col">
<label>Fax:</label>
<p>@RequestItem.Fax_Number</p>
</div>
}
</div>
</div>
</div>
<br />
<div class="card p-3 shadow">
<div class="card-header bg-dark">
<label class="text-white">Requestor Information</label>
</div>
<div class="card-body">
<div class="row">
<div class="col">
<label>Title:</label>
<p>@RequestItem.Request_Title</p>
</div>
<div class="col">
<label>Name:</label>
<p>@RequestItem.Request_LName, @RequestItem.Request_FName</p>
</div>
<div class="col">
<label>Email:</label>
<p>@RequestItem.Email</p>
</div>
<div class="col">
<label>Phone/Ext:</label>
@if (String.IsNullOrEmpty(RequestItem.Extension))
{
string NoExtension = RequestItem.Phone_number;
<p>@NoExtension</p>
}
else
{
string AddExtension = RequestItem.Phone_number + " / " + RequestItem.Extension;
<p>@AddExtension</p>
}
</div>
</div>
</div>
</div>
<br />
<div class="card p-3 shadow">
<div class="card-header bg-dark">
<label class="text-white">Logscan Information</label>
</div>
<div class="card-body">
<div class="row">
<div class="col">
<label>Time to be searched:</label>
<p>@RequestItem.Timeframe_To_Be_Searched</p>
</div>
<div class="col">
<label>Request Reason:</label>
<p>@RequestItem.Request_Reason</p>
</div>
<div class="col">
<label>Request Type:</label>
<p>@RequestItem.SearchType</p>
</div>
<div class="col">
<label>Criteria:</label>
<p>@RequestItem.Criteria</p>
</div>
</div>
</div>
</div>
<br />
<div class="row">
<div class="col-2 justify-content-start">
<button class="btn btn-secondary" @onclick="OpenReportDialog">View Report</button>
<button class="btn btn-secondary" @onclick="OpenAssignReport">Assign</button>
<ViewReportDialog @ref="ViewReportDialog" OnPrint="Print" OnClose="CloseDialog" RequestedItem="RequestItem" />
<PrintDialog @ref="PrintDialog" OnPrint="Print" OnClose="CloseDialog" />
@if (clicked == true)
{
<CascadingValue Value="RequestItem">
<Assign_Report inModel="RequestItem"></Assign_Report>
</CascadingValue>
}
</div>
</div>
</div>
代码隐藏页面
using Blazored.Modal.Services;
using Logscan_Request.Pages.Modal;
using LogscanRequest.Shared.Domain;
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Logscan_Request.Pages
{
public partial class LogscanRequestItem
{
[CascadingParameter] public IModalService Modal { get; set; }
[Parameter] public LogscanRequestModel RequestItem { get; set; }
public ViewReportDialog ViewReportDialog { get; set; }
public PrintDialog PrintDialog { get; set; }
public Assign_Report Assign_Report { get; set; } = new Assign_Report();
protected string collapsed { get; set; } = "collapse";
protected bool Expanded;
protected void Expand()
{
if (!Expanded)
{
Expanded = true;
collapsed = string.Empty;
}
else
{
Expanded = false;
collapsed = "collapse";
}
}
private void OpenReportDialog()
{
ViewReportDialog.Show();
}
async Task OpenAssignReport()
{
Assign_Report.Show();
}
private void CloseDialog()
{
StateHasChanged();
}
public void Print()
{
ViewReportDialog.Close();
PrintDialog.Show();
StateHasChanged();
}
}
}
后面的模态页面代码
using Blazored.Modal;
using Blazored.Modal.Services;
using LogscanRequest.Shared.Domain;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Logscan_Request.Pages.Modal
{
public partial class Assign_Report
{
//[Inject] IHttpContextAccessor HttpContext { get; set; }
[Parameter] public LogscanRequestModel requestMod { get; set; }
[CascadingParameter] public IModalService Modal { get; set; }
[CascadingParameter] BlazoredModalInstance BlazoredModal { get; set; }
private EditContext EditContext;
private bool ShowDialog { get; set; }
async Task Close()
{
ShowDialog = false;
StateHasChanged();
await BlazoredModal.CloseAsync(ModalResult.Ok(true));
}
async Task Cancel() => await BlazoredModal.CancelAsync();
protected override void OnInitialized()
{
ShowDialog = false;
//EditContext = new EditContext(RequestMod);
//RequestMod.ModifyBy = HttpContext.HttpContext.User.Identity.Name;
}
private async Task HandleValidSubmit()
{
}
public void Show()
{
Modal.Show<Assign_Report>();
}
}
}
错误:System.InvalidOperationException:“Logscan_Request.Pages.Modal.Assign_Report”类型的对象没有与名称“Assign_Report”匹配的属性。在 Microsoft.AspNetCore.Components.Reflection.ComponentProperties.ThrowForUnknownIncomingParameterName(Type targetType, String parameterName) 在 Microsoft.AspNetCore.Components.Reflection.ComponentProperties.SetProperties(ParameterView& parameters, Object target) 在 Microsoft.AspNetCore.Components.ComponentBase.SetParametersAsync(ParameterView参数)在 Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewComponentFrame(DiffContext& diffContext, Int32 frameIndex) 在 Microsoft.AspNetCore.Components.RenderTree 的 Microsoft.AspNetCore.Components.Rendering.ComponentState.SetDirectParameters(ParameterView 参数)。
1 oldTree, ArrayRange
1 newTree) 在 Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry) 在 Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue ()