如何解决将特定于页面的事件处理程序附加到 Blazor 服务器中的注入服务
我对 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() 中使用不同的逻辑我让它在使用那种火腿吝啬的本地事件附加和分离的情况下工作了一点,但它有副作用,我确定我是首先使用它是完全错误的。我希望将服务作为范围注入可以让我做到这一点;将它创建为瞬态完成我的实现吗?我很难找到合适的内容来搜索以管理单页应用程序中任何服务上的事件,因此我们将不胜感激!
解决方法
您指向的文档使用了 @implements IDisposable
和 Dispose()
,这更有意义。
我认为完整的事件处理应该像他们的一样,没有其他的 +=
或 -=
:
@implements IDisposable
...
@code {
protected override void OnInitialized()
{
DialogService.OnOpen += Open;
DialogService.OnClose += Close;
}
public void Dispose()
{
// The DialogService is a singleton so it is advisable to unsubscribe.
DialogService.OnOpen -= Open;
DialogService.OnClose -= Close;
}
...
}
此外,您不应该需要 JS 并将 Submit() 方法设为 async Task
,而不是 async void
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。