-
Is there an existing issue for this?
Is your feature request related to a problem? Please describe the problem.我在一个项目中参照了
Describe the solution you'd like经过一番折腾,我能够明白这是Blazor自身全局处理不够强导致,
以下是我折腾出的代码: public class ExceptionHandler : ErrorBoundaryBase
{
[Inject]
private IErrorBoundaryLogger? ErrorBoundaryLogger { get; set; }
private bool firstRender = true;
private bool showExceptionMessagePopover = false;
private int errorRenderCount = 0;
protected override async Task OnErrorAsync(Exception exception)
{
showExceptionMessagePopover = true;
errorRenderCount++;
await ErrorBoundaryLogger!.LogErrorAsync(exception);
}
protected override void OnAfterRender(bool firstRender)
{
this.firstRender = firstRender;
}
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
int sequence = 0;
if (CurrentException is null)
{
builder.AddContent(sequence++, ChildContent);
}
else if (ErrorContent is not null)
{
builder.AddContent(sequence++, ErrorContent(CurrentException));
}
else
{
if (firstRender || errorRenderCount> 2)
{
builder.OpenElement(sequence++, "div");
builder.AddAttribute(sequence++, "class", "blazor-error-boundary");
builder.CloseElement();
}
else
{
builder.AddContent(sequence++, ChildContent);
builder.OpenComponent<ExceptionMessagePopover>(3);
builder.AddComponentParameter(sequence++, "Open", showExceptionMessagePopover);
builder.AddComponentParameter(sequence++, "OpenChanged", EventCallback.Factory.Create<bool>(this, SetShowExceptionMessagePopover));
builder.AddComponentParameter(sequence++, "Exception", CurrentException);
builder.CloseComponent();
}
}
}
private void SetShowExceptionMessagePopover(bool value)
{
if (showExceptionMessagePopover && !value)//满足此条件,说明错误提示框成功渲染出来了,没有再触发其他异常,这里重置掉相关状态
{
errorRenderCount= 0;
Recover();
}
showExceptionMessagePopover = value;
}
} Additional contextNo response |
Beta Was this translation helpful? Give feedback.
Replies: 5 comments 9 replies
-
@izanhzh Thank you for contacting us. We will give feedback later. |
Beta Was this translation helpful? Give feedback.
-
@izanhzh 请提供一下示例代码啊。上传个工程给我。大佬的意思是让我们的组件用你这套逻辑对吗? |
Beta Was this translation helpful? Give feedback.
-
没有没有,你才是真大佬,我在上面提供了我折腾的一个代码,是想看看有没有参考价值,或者你们有没有更好的办法,目前blazor的这个全局处理老是差那么点意思,如果大佬觉得这个建议不合适,可以关掉这个feat |
Beta Was this translation helpful? Give feedback.
-
@izanhzh 别紧张,能提高组件性能或者功能,我们都乐意合并的。需要示例比如哪里不满意?你这个代码增强了哪里? |
Beta Was this translation helpful? Give feedback.
-
我希望能够自动跳出循环错误的情况,让它能够应对全部地方抛出的异常,如果是像初始化时触发的异常,实在没办法弹窗,就退而求其次,进入错误页面,包括弹窗提示的时候有异常,也进入错误页面 |
Beta Was this translation helpful? Give feedback.
代码我看了。问题如下
不能用原生的 button 这样拦不住