将特定于页面的事件处理程序附加到 Blazor 服务器中的注入服务

如何解决将特定于页面的事件处理程序附加到 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 IDisposableDispose(),这更有意义。

我认为完整的事件处理应该像他们的一样,没有其他的 +=-=

@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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?