如何将带有注入的剃刀页面转换为代码隐藏?
How do I convert a razor page with an injection to a code-behind?
我正在修改 [Blazor 提示和技巧][1]
中的一个 blazor 示例
[1]: https://www.youtube.com/watch?v=3duXMxwnkXI 从第 17 分钟开始。
如果在Visual Studio中新建一个名为BlazorCounter的Blazor App,并修改生成的Counter.razor看起来像这样:
@page "/counter"
@inject Data.CounterState State
<h1>Counter</h1>
<p>Current count: @State.CurrentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
void IncrementCount()
{
State.CurrentCount++;
}
}
然后在Data文件夹中添加如下c#class
namespace BlazorCounter.Data
{
public class CounterState
{
public int CurrentCount { get; set; }
}
}
最后在Startup的ConfigureServices方法末尾添加这一行class:
services.AddScoped<CounterState>();
那么您就有了一个计数器,它会保留其状态并且不会在您每次导航到“计数器”页面时都从零开始。
我的问题是:如何将其转换为 'code-behind' 并分离 C# 代码?
我已将其他剃刀页面转换为 'code-behind',但看不到如何处理 @inject 行。
创建基础 class 并使用 [InjectAttribute]
:
注入服务
public class MyCounterComponent : ComponentBase
{
[Inject]
public virtual CounterState State { get; set; }
protected void IncrementCount()
{
State.CurrentCount++;
}
}
我还将您的 IncrementCount()
方法从视图文件移至此 class 文件。
现在您可以将它与 @inherits
指令一起使用:
@page "/counter"
@inherits BlazorApp1.Pages.MyCounterComponent
<h1>Counter</h1>
<p>Current count: @State.CurrentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
有关详细信息,请参阅 Request a service in a component and Use DI in services
我正在修改 [Blazor 提示和技巧][1]
中的一个 blazor 示例[1]: https://www.youtube.com/watch?v=3duXMxwnkXI 从第 17 分钟开始。
如果在Visual Studio中新建一个名为BlazorCounter的Blazor App,并修改生成的Counter.razor看起来像这样:
@page "/counter"
@inject Data.CounterState State
<h1>Counter</h1>
<p>Current count: @State.CurrentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
void IncrementCount()
{
State.CurrentCount++;
}
}
然后在Data文件夹中添加如下c#class
namespace BlazorCounter.Data
{
public class CounterState
{
public int CurrentCount { get; set; }
}
}
最后在Startup的ConfigureServices方法末尾添加这一行class:
services.AddScoped<CounterState>();
那么您就有了一个计数器,它会保留其状态并且不会在您每次导航到“计数器”页面时都从零开始。
我的问题是:如何将其转换为 'code-behind' 并分离 C# 代码? 我已将其他剃刀页面转换为 'code-behind',但看不到如何处理 @inject 行。
创建基础 class 并使用 [InjectAttribute]
:
public class MyCounterComponent : ComponentBase
{
[Inject]
public virtual CounterState State { get; set; }
protected void IncrementCount()
{
State.CurrentCount++;
}
}
我还将您的 IncrementCount()
方法从视图文件移至此 class 文件。
现在您可以将它与 @inherits
指令一起使用:
@page "/counter"
@inherits BlazorApp1.Pages.MyCounterComponent
<h1>Counter</h1>
<p>Current count: @State.CurrentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
有关详细信息,请参阅 Request a service in a component and Use DI in services