我如何处理Blazor子组件在托管它的组件/页面中抛出的异常?

我如何处理Blazor子组件在托管它的组件/页面中抛出的异常?,blazor,blazor-server-side,Blazor,Blazor Server Side,我正在构建一个Blazor UI组件,该组件负责验证登录凭据(用户名和密码)。它使用身份验证服务进行验证。如果凭据无效,服务将抛出InvalidLogIncredentialException。我使用的是“代码隐藏”方法,C#看起来像这样 public class LoginFormBase : PageBase { // Properties // public String Username { get; set; } = String.Empty; pub

我正在构建一个Blazor UI组件,该组件负责验证登录凭据(用户名和密码)。它使用身份验证服务进行验证。如果凭据无效,服务将抛出InvalidLogIncredentialException。我使用的是“代码隐藏”方法,C#看起来像这样

public class LoginFormBase : PageBase
{
    // Properties
    //
    public String Username { get; set; } = String.Empty;

    public String Password { get; set; } = String.Empty;


    // EventCallback to communicate the result to the parent component
    //
    [Parameter]
    public EventCallback<SingleSignOn> OnLogin { get; set; }
    
    // Event handler
    //
    protected void btnLogin_OnClick()
    {
        var user = this.SignOnService.Login(this.Username, this.Password); <!-- throws InvalidLoginCredentialsException
        OnLogin.InvokeAsync(user);
    }
}
所以问题是,当我输入错误的凭据时,异常会按预期抛出,但我希望在LoginBase代码中处理它。我想尝试/捕获异常,以便处理它,但由于LoginForm组件中正在“调用”LoginForm\u OnLogin(),因此LoginBase代码中没有要捕获的内容


如何处理Blazor子组件在承载它的组件/页面中抛出的异常?

LoginForm初始化调用堆栈。它不是由父窗体启动的,因此不会将错误发回父窗体

您应该在LoginForm中捕获错误,然后使用另一个事件将错误的详细信息通知父窗体


例如,添加另一个事件OnLoginFailure(errorInfo)

就是这样。。。非常感谢你。
@page "/login";
@inherits LoginBase
@using ThriftShopTracker.Components;


<div class="container">
    
    <h1 class="display-8 mt-3 mb-2">Login</h1>
    
    <LoginForm OnLogin="@LoginForm_OnLogin"></LoginForm>

</div>
 public class LoginBase : PageBase
 {        
      protected void LoginForm_OnLogin(SingleSignOn user)
      {
          this.CurrentUser = user;
          // 
          // I WANT TO HANDLE THE EXCEPTION HERE
          //
      }
  }