【发布时间】:2021-06-28 17:40:09
【问题描述】:
我对 Blazor 服务器非常陌生,并且一般都在试验网页,并且无法弄清楚如何正确地将事件处理程序附加到应该根据当前页面触发不同操作的模式。我只是希望能够在提交时将页面信息作为电子邮件发送,但它最终会发送所有呈现的页面电子邮件,因为它认为每个事件都已触发。
我正在使用 Radzen 的 Blazor DialogService 并尝试遵循他们的 documentation 中的模式 - 像这样将方法附加到它
protected override void OnInitialized()
{
DialogService.OnOpen += Open;
DialogService.OnClose -= Close;
DialogService.OnClose += Close;
}
private void Open(string Title, Type type, Dictionary<string, object> parameters, DialogOptions options)
{
}
private void Close(dynamic result)
{
if (result == true)
{
JS.InvokeAsync<string>("DisableDialogSubmit", "nhDialogSubmit");
SendEmail();
}
}
async void Submit()
{
await SubmitModal();
DialogService.OnClose -= Close;
}
void OnInvalidSubmit()
{
}
async Task SubmitModal() => await DialogService.OpenAsync("Confirm Submission", (ds =>
@<div style="top: 25%">
<p Style="margin-bottom: 1rem">Submit Form?</p>
<div class="row">
<div class="col-md-12">
<RadzenButton id="nhDialogSubmit" Text="Submit" Disabled="false" Click="() => ds.Close(true)" Style="margin-bottom: 10px; width: 150px" />
<RadzenButton Text="Cancel" Click="() => ds.Close(false)" ButtonStyle="ButtonStyle.Secondary" Style="margin-bottom: 10px; width: 150px" />
</div>
</div>
</div>),
new DialogOptions() { Width = "350px", Top = "35%", Left = "25%" });
这段代码在 SendEmail() 中以不同的逻辑复制粘贴在每个页面上一开始就完全错误地使用它。我希望按范围注入服务可以让我做到这一点;将它创建为瞬态完成我的实现吗?我很难找到合适的东西来搜索以管理单页应用程序中任何服务上的事件,因此非常感谢任何提示或指针!
【问题讨论】:
标签: asp.net-core event-handling blazor single-page-application blazor-server-side