什么是c#中的[Parameter]属性

Err*_*cio 1 c# blazor

我在Blazor观看教程。然后我遇到了这段代码,但似乎无法在Internet上找到它,或者我认为我没有使用正确的术语搜索至少。

@code{
[Parameter]
    public IList<Todo> Todo {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

它仅在blazor中排他,还是在c#中可用。请给一些参考。提前致谢。

Pan*_*vos 7

创建和使用ASP.NET Core Razor组件中对此进行了说明,尤其是在“ 组件参数”部分中。

[Parameter]用于标记当在另一页面中使用组件时可以设置的组件参数。从doc示例中借用的该组件没有任何参数:

<div class="panel panel-default">
    <div class="panel-heading">@Title</div>
    <div class="panel-body">@ChildContent</div>

    <button class="btn btn-primary" @onclick="OnClick">
        Trigger a Parent component method
    </button>
</div>

@code {
    public string Title { get; set; }

    public RenderFragment ChildContent { get; set; }

    public EventCallback<MouseEventArgs> OnClick { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

没有[Parameter]属性,这些只是不能从其他页面设置的公共属性。以下行将无效:

<ChildComponent Title="Panel Title from Parent" />
Run Code Online (Sandbox Code Playgroud)

虽然这:

<div class="panel panel-default">
    <div class="panel-heading">@Title</div>
    <div class="panel-body">@ChildContent</div>

    <button class="btn btn-primary" @onclick="OnClick">
        Trigger a Parent component method
    </button>
</div>

@code {
    [Parameter]
    public string Title { get; set; }

    [Parameter]
    public RenderFragment ChildContent { get; set; }

    [Parameter]
    public EventCallback<MouseEventArgs> OnClick { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

允许我们在使用该组件时设置参数:

<ChildComponent Title="Panel Title from Parent"
                OnClick="@ShowMessage">
    Content of the child component is supplied
    by the parent component.
</ChildComponent>
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 5

C#中的所有属性都必须引用在某处定义该属性的类型。该Blazor代码仍为C#。

在这种情况下,我认为它引用的是Microsoft.AspNetCore.Components.ParameterAttribute-该文档当前为MIA,但随着时间的推移可能会有所改善。Blazor文档中有更多详细信息

通常,如果前面有代码(通常在观看教程时是个好主意,如果可能的话),则可以将鼠标悬停在Visual Studio中的属性上以查看其标准名称或导航至该名称。

  • @ErrolPaleracio:我希望* VS代码仍然允许您导航到属性的声明。 (2认同)