我正在学习Razor。我在Budget.razor
中有一个非常简单的Razor组件(使用MudBrazor框架(
@page "/budget"
<PageTitle>Budget</PageTitle>
<MudGrid>
<MudItem xs="12" sm="6" md="4">
<p> Hello you @HelloConsole() </p>
</MudItem>
</MudGrid>
和Budget.razor.cs
:中的一个偏类
namespace MyProject.Pages
{
public partial class Budget
{
protected void HelloConsole()
{
Console.WriteLine("Hello");
}
}
}
我在Visual studio中收到错误:
Cannot implicitly convert type 'void' to 'object'
我做错了什么?
<p> Hello you @HelloConsole() </p>
说把方法HelloConsole()
的输出放在这里。但是HelloConsole
返回了一个void,这正是错误所说的,渲染器无法处理。
这项工作:
protected string HelloConsole()
{
Console.WriteLine("Hello");
return "I just wrote to the console";
}
要回答的附加项:
加载组件时执行一些代码:
protected override void OnInitialized()
{
Console.WriteLine("Hello");
}
// or
protected override Task OnInitializedAsync()
{
Console.WriteLine("Hello");
return Task.CompletedTask;
}
您需要作为匿名lambda执行,否则它将返回字符串/对象:
这应该有效:
@page "/budget"
<PageTitle>Budget</PageTitle>
<MudGrid>
<MudItem xs="12" sm="6" md="4">
<p> Hello you @(() => HelloConsole()) </p>
</MudItem>
</MudGrid>
protected void HelloConsole()
{
Console.WriteLine("Hello");
}
您正在向控制台进行写入。Blazor标记需要一个对象(因为它基本上呈现一组字符串(。更改代码以返回"0";你好;。这会奏效的。