Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MainLayout上设置参数的最佳实践_C#_Blazor_Blazor Webassembly - Fatal编程技术网

C# 在MainLayout上设置参数的最佳实践

C# 在MainLayout上设置参数的最佳实践,c#,blazor,blazor-webassembly,C#,Blazor,Blazor Webassembly,我有一套Blazor微型网站。它们都共享相同的MainLayout,MainLayout作为组件库中的组件创建。这是为了增强一致的外观和感觉 一些微站点需要在MainLayout中设置子组件的可见参数,该参数在MainLayout上作为参数公开 我用CascadingParameter完成了这项工作,但这似乎是错误的方法 这是唯一的办法吗?这是最好的方法吗?有没有办法直接设置参数? 下面是代码,为了简单起见删除了一些代码 <CascadingValue Value=

我有一套Blazor微型网站。它们都共享相同的MainLayout,MainLayout作为组件库中的组件创建。这是为了增强一致的外观和感觉

一些微站点需要在MainLayout中设置子组件的可见参数,该参数在MainLayout上作为参数公开

我用CascadingParameter完成了这项工作,但这似乎是错误的方法

这是唯一的办法吗?这是最好的方法吗?有没有办法直接设置参数? 下面是代码,为了简单起见删除了一些代码

            <CascadingValue Value="OptionalThingVisible">
                <AuthorizeRouteView DefaultLayout="@typeof(MainLayout)">
                    <NotAuthorized>
                        <RedirectToLogin />
                    </NotAuthorized>
                </AuthorizeRouteView>
            </CascadingValue>

@code {
    bool OptionalThingVisible = false; //It's hard-coded and won't change.
}

@代码{
bool OptionalThingVisible=false;//它是硬编码的,不会更改。
}
我会这样做:

<CascadingValue Value="this">
    //....
</CascadingValue>
<CascadingValue Value="this">
    //....
    <SubComponent Value ="Value" />
</CascadingValue>
将主布局的参考级联给相关方,如下所示:

<CascadingValue Value="this">
    //....
</CascadingValue>
<CascadingValue Value="this">
    //....
    <SubComponent Value ="Value" />
</CascadingValue>
您的主布局现在应该如下所示:

<CascadingValue Value="this">
    //....
</CascadingValue>
<CascadingValue Value="this">
    //....
    <SubComponent Value ="Value" />
</CascadingValue>
请注意,您可以使用服务获得相同的功能……但是,我认为,在这种情况下,这更可取。

我会这样做:

<CascadingValue Value="this">
    //....
</CascadingValue>
<CascadingValue Value="this">
    //....
    <SubComponent Value ="Value" />
</CascadingValue>
将主布局的参考级联给相关方,如下所示:

<CascadingValue Value="this">
    //....
</CascadingValue>
<CascadingValue Value="this">
    //....
    <SubComponent Value ="Value" />
</CascadingValue>
您的主布局现在应该如下所示:

<CascadingValue Value="this">
    //....
</CascadingValue>
<CascadingValue Value="this">
    //....
    <SubComponent Value ="Value" />
</CascadingValue>

请注意,您可以使用服务获得相同的功能……但是,我认为,在这种情况下,这更可取。

这是一种非常有效的方法,我已经使用过。不过,我可以就实施提出几点建议

在您的实现中,您只能有一个布尔值作为级联值—您没有给它一个name属性。因此,如果你想继续使用bool,我建议你用一个名字来限定cascade-


您应该考虑级联对象,比如“代码> LayOutsOuts<代码>,其中<代码> opthalthys<代码>只是一个属性。如果您决定拥有多个

可选对象,并且您不需要限定它,因为它是唯一的,那么这将为您提供更多的范围。

这是一种非常有效的方法,我已经使用过。不过,我可以就实施提出几点建议

在您的实现中,您只能有一个布尔值作为级联值—您没有给它一个name属性。因此,如果你想继续使用bool,我建议你用一个名字来限定cascade-


您应该考虑级联对象,比如“代码> LayOutsOuts<代码>,其中<代码> opthalthys<代码>只是一个属性。如果您决定拥有多个

optionalthing
,并且您不需要限定它,因为它是唯一的,那么这将为您提供更大的范围。

考虑到您正在尝试做的事情,您可能已经有了最好的方法。您实际上是以编程方式传入配置值。另一种选择是注入一个服务,该服务可以在每个项目中实现,它除了公开配置值之外什么都不做,但这将是一种您自己的方法,它只做您已经在做的事情。按照您的方式,如果您没有提供该值,您应该会遇到一个编译器错误,从而强制执行您的模式。随着应用程序的增长,它将允许更多的“参数”。@BrianParker这似乎是一个很好的方法,而且感觉也更好。这个参数比级联参数更简洁。@BrianParker这是一个很好的解决方案,我们目前在我们的webapp中这样做。我们称之为“SessionStateService”,在这里我们存储大量的东西。我们在用户登录时备份数据库中的会话,并在登录时恢复会话,它工作得很顺利。您实际上是以编程方式传入配置值。另一种选择是注入一个服务,该服务可以在每个项目中实现,它除了公开配置值之外什么都不做,但这将是一种您自己的方法,它只做您已经在做的事情。按照您的方式,如果您没有提供该值,您应该会遇到一个编译器错误,从而强制执行您的模式。随着应用程序的增长,它将允许更多的“参数”。@BrianParker这似乎是一个很好的方法,而且感觉也更好。这个参数比级联参数更简洁。@BrianParker这是一个很好的解决方案,我们目前在我们的webapp中这样做。我们称之为“SessionStateService”,在这里我们存储大量的东西。当用户登录时,我们在数据库中备份会话,并在登录时恢复会话,它工作顺利。@enet和我都回答了,他的方法同样有效。谢谢。我选择另一个作为答案,因为它看起来更灵活,并且有代码示例,这使它更易于阅读和理解。谢谢您的反馈。@enet和我都回答了,他的方法同样有效。谢谢。我选择另一个作为答案,因为它看起来更灵活,并且有代码示例,这使它更易于阅读和理解。谢谢你的反馈。谢谢你,我在别处看到了“this”的级联参数,我一直想知道它是如何工作的。现在看来更清楚了。我喜欢这种方法,因为它使用完整的MainLayout作为可选参数的容器。现在看来更清楚了。我喜欢这种方法,因为它使用完整的MainLayout作为可选参数的容器。