【问题标题】:Difference between "@MethodName" and "MethodName" in Blazor when passing methods as parameter?将方法作为参数传递时,Blazor 中的“@MethodName”和“MethodName”之间的区别?
【发布时间】:2020-04-16 14:56:46
【问题描述】:

我在 Blazor 中有一个接受方法作为参数的组件。

<SuppliersTable Loader="@LoadS" LoaderO="@LoadO" Adder="@Add" Updater="@Update" Remover="@Remove" />

@code {
    async Task<List<Supplier>> LoadS() => (await ModelServiceS.GetAllAsync()).ToList();
    async Task<List<Operator>> LoadO() => (await ModelServiceO.GetAllAsync()).ToList();
    async Task<bool> Add(Supplier model) => await ModelServiceS.AddAsync(model);
    async Task<bool> Update(Supplier model) => await ModelServiceS.UpdateAsync(model);
    async Task<bool> Remove(Supplier model) => await ModelServiceS.RemoveAsync(model);
}

但是如果你不把“@”放在方法名前面,它会做完全不同的事情吗?编译器接受两种方式,这就是我要问的原因。我的感觉是,使用“@”它执行方法并将返回值作为参数传递,而没有“@”,您只是引用父组件调用的方法(这是我想要的)。有人可以向我提供有关“@”用法的更多详细信息吗?

SuppliersTable组件的参数类型如下:

[Parameter] public Func<Task<List<Supplier>>> Loader { get; set; }
[Parameter] public Func<Task<List<Operator>>> LoaderO { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Adder { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Updater { get; set; }
[Parameter] public Func<Supplier, Task<bool>> Remover { get; set; }

【问题讨论】:

    标签: c# asp.net-core blazor blazor-server-side


    【解决方案1】:

    这是新旧语法的问题。 Blazor 的预览阶段有很多变化,其中一个主要的清理是在Preview 6:

    在此 Blazor 版本中,我们对指令属性的通用语法进行了标准化。

    • @onclick="IncrementCount" 现在是事件处理程序的标准格式。

    • @onclick="@IncrementCount" 效果很好,但您应该考虑它只是为了向后兼容。

    • @onclick="() =&gt; IncrementCount(step)" 也可以,用它来传递参数。否则,这只是一个不必要的额外步骤。

    • onclick="aJsFunction" 用于调用 JavaScript。

    [Parameter] 属性的值也是如此,但它们不需要(或允许)@ 前缀。

    【讨论】:

      【解决方案2】:

      在任何一种方式都有效的情况下,结果是相同的。您没有取消引用该方法(即()),因此它不会执行该方法;你仍然通过引用。

      这归结为@ 明确地将 Razor 解析加入混合中。在某些情况下,Razor 无法解释它需要或应该做某事,您通常可以通过智能感知突出显示。在这些情况下,您必须添加@ 符号。但是,如果 Razor 已经想通了,那么添加 @ 基本上没有任何作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-10
        • 2011-11-18
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        相关资源
        最近更新 更多