Blazor 中的@{} @code{} 和@function{} 有什么区别?

Mel*_* NG 18 .net-core asp.net-core blazor

我正在学习服务器端。西装外套。

我已经阅读了一些项目的代码,发现了一些使用:

@{
}
Run Code Online (Sandbox Code Playgroud)

和一些使用:

@code{
}
Run Code Online (Sandbox Code Playgroud)

和其他使用:

@function{
}
Run Code Online (Sandbox Code Playgroud)

标记代码块。

我想知道这些之间的区别。谢谢你。

Kha*_*bir 6

@{}

您不能在 @{} 下使用函数设置 get属性,只能使用声明。例如:

@{
    DateTime today = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)

但下面的代码会显示错误,因为我在这里使用函数

@{
    public DateTime GetDate()
    {
        return DateTime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

@代码{ }

您可以在@code {}下编写任何C# 代码,例如:

@code{
    [Parameter]
    public Guid id { get; set; }

    AccessoryDto accessory;
    protected override Task OnInitializedAsync()
    {
        if (id == Guid.Empty)
            accessory = new AccessoryDto();
        else
            accessory = GetAccessory(id);
        return Task.FromResult(accessory);
    }

    void cancel()
    {
        NavigationManager.NavigateTo("/accessories");
    }
}
Run Code Online (Sandbox Code Playgroud)

@功能{ }

@function 与 @code 做同样的事情,但现在建议使用@code

除此之外,你还可以使用@符号来使用条件、循环等。例如:

@if (id == null)
{
    <h1>Create</h1>
}
else
{
    <h1>Edit</h1>
}
Run Code Online (Sandbox Code Playgroud)

<tbody>
    @foreach (var accessory in Accessories)
    {
    <tr>
        <td>@accessory.Name</td>
        <td>@accessory.Description</td>
        <td>
            <a href='/editaccessory/@accessory.Id'>Edit</a>  |
            <a href='/delete/@accessory.Id'>Delete</a>
        </td>
    </tr>
    }
</tbody>
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用@()来表达。例如:

<a href="@($"employee/{employeeId}")">View</a>
Run Code Online (Sandbox Code Playgroud)