C# Blazor,加载时从/停止渲染返回

C# Blazor,加载时从/停止渲染返回,c#,blazor,blazor-server-side,C#,Blazor,Blazor Server Side,我们在所有Blazor页面中都有类似的代码,只需停止渲染,直到加载完成。它似乎工作正常,但该网站还没有进行太多的测试 我有点担心,这意味着回报;在页面的中间,将(或)把闪光灯弄得乱七八糟,导致内存泄漏或任何东西。 我看到的每个示例都使用if/else,但如果下面的示例有效,则最好减少页面的嵌套和复杂性 那么,这种方法可以使用吗,还是会给我们带来问题 一个简化的例子: @usings/injects在这里 @如果(孤岛加载) { @:正在加载内容。。 返回; } 在页面初始化并填充模型之前,将不会

我们在所有Blazor页面中都有类似的代码,只需停止渲染,直到加载完成。它似乎工作正常,但该网站还没有进行太多的测试

我有点担心,这意味着回报;在页面的中间,将(或)把闪光灯弄得乱七八糟,导致内存泄漏或任何东西。

我看到的每个示例都使用if/else,但如果下面的示例有效,则最好减少页面的嵌套和复杂性

那么,这种方法可以使用吗,还是会给我们带来问题

一个简化的例子:

@usings/injects在这里
@如果(孤岛加载)
{
@:正在加载内容。。
返回;
}
在页面初始化并填充模型之前,将不会呈现此内容

@富吧

@代码{ public bool IsLoading{get;set;}=true; 公共FooModel Foo{get;set;} 受保护的重写异步任务OnInitializedAsync() { 尝试 { Foo=等待GetFooFromRepo(); } 捕获(例外情况除外) { Toaster.Add(“加载foo时出错。”, MatToastType.Danger,“错误”); } 最后 { IsLoading=false; } } }
我不会使用这种方法

我建议这样做的方式是用一个声明,如下所示:

@if (IsLoading)
{
    @:Loading content..
}
else 
{  
  <p>This will not be rendered until page is initialized and Model populated</p> 
  <p>@Foo.Bar</p>
}
    
@if(正在加载)
{
@:正在加载内容。。
}
其他的
{  
在页面初始化并填充模型之前,将不会呈现此内容

@富吧

}
这是一个品味或风格的问题

它本质上没有什么问题,只是从一个方法返回


在这本书中,它被比作意大利面条代码,但这要视情况而定。您编写
return
的方式非常清晰,不容忽视。另一种选择是
else{}
有它自己的阅读成本。

你的理由是什么?想象一下,试图找出为什么某个巨大的标记块没有在某个页面中呈现,而周围没有任何条件。只发现在组件的中间有一些意外的返回语句。如果是我的话,我想我的反应不会很好。发件人:我明白你的意思。然而,在本例中,代码将始终位于所有其他“html”标记之上,以保持其结构化。感谢您的投入,无论哪种方式,都会奏效,正如@Henk所说,这是一个品味问题。但我肯定会使用@if-else方法。这也是习惯的问题。。。在我看来,使用
if-else
,创建意大利面代码的机会就更少了。我认为,如果代码允许,这更像是一种快速返回的方法,就像大多数方法中的方法一样。我对它的结构很满意,我最担心的是它会给blazor堆栈甚至js带来一些问题。谢谢——这是一个品味和风格的问题,这是一个完美的答案。我将坚持这种方法,因为我不喜欢在if/else中嵌套大块的标记。