Razor 组件按钮 @onclick 不调用 c# 方法
Razor component button @onclick not calling c# method
我想开始创建一个新网站,我遇到了 blazor/razor asp.net。我会说只是看着它,这让我非常兴奋能够摆脱所有 javascript 框架。但是,与许多其他人一样,我在使用简单的@onclick 时遇到了问题,而且我对 blazor/razor 进行的研究越多,我就越感到困惑。正如其他人指出的那样,一切似乎都在不断变化,所以我找到的资源一直自相矛盾。
首先,我尝试在 ASP.NET 核心 Web 应用程序中创建一个简单的 Razor 组件(.razor 扩展名)。我在 youtube 上观看了“ASP.NET Core 3.0 中的 Razor 组件介绍 - Daniel Roth”视频作为入门指南,并得出以下结论:
<div class="">
<input type="text" placeholder="Search..." @bind="@searchValue">
<button @onclick="Search">Search</button>
</div>
@count
@code {
string searchValue;
int count;
void Search()
{
var x = searchValue;
count++;
}
}
我的问题是,@onclick 按钮没有调用 Search 方法。我见过这种语法的几种不同变体,我都试过了。我提到的视频是
<button onclick="@Search">Search</btton>
但我发现现在onclick 前面需要@ 符号。我已经看到在方法名称前面包含和不包含 @ 符号。如果我不包含它,它会编译并运行,但按钮不会执行任何操作。如果我包含它,我会收到错误消息:
Cannot convert method group 'Search' to non-delegate type 'object'. Did you intend to invoke the method?
我发现这个 BlazorFiddle (https://blazorfiddle.com/s/aoa87v05) 是一个快速测试平台,发现同时添加:
<button @onclick="@SomeAction">Click Me</button>
<button @onclick="SomeAction">Click Me</button>
工作正常。所以我不确定我在这里做错了什么。 (也许这个 blazor fiddle 使用的是旧版本?)
如有任何帮助,我们将不胜感激。
作为参考,这里是调用它的 .cshtml 页面:
@page
@using WebPortal.ComponentLibrary.Common
@model WebPortal.Pages.Reporting.ReportingModel
@{
ViewData["Title"] = "Reports";
}
<div class="text-center">
<h1 class="display-4">Welcome to the Web Portal</h1>
<component type="typeof(SearchBar)" render-mode="static" />
</div>
我已经尝试了渲染模式的每个选项,但没有成功。
我也已经添加了“services.AddServerSideBlazor()”和“endpoints.MapBlazorHub();”到 Startup.cs 页面。
PS:作为旁注问题,没什么大不了的,我看到一些对使用语法
调用的组件的引用
<SearchBar />
,但这对我不起作用。那已经被删除了吗?我更喜欢这种语法,因为它看起来更简洁。
您似乎将 Razor 和服务端页面与 Blazor 混淆了。你想开发什么?如果是 Blazor,请观看最新的 Blazor 视频并开始部署标准 Blazor 模板。您的代码在 BLAZOR 页面中有效。
我想开始创建一个新网站,我遇到了 blazor/razor asp.net。我会说只是看着它,这让我非常兴奋能够摆脱所有 javascript 框架。但是,与许多其他人一样,我在使用简单的@onclick 时遇到了问题,而且我对 blazor/razor 进行的研究越多,我就越感到困惑。正如其他人指出的那样,一切似乎都在不断变化,所以我找到的资源一直自相矛盾。
首先,我尝试在 ASP.NET 核心 Web 应用程序中创建一个简单的 Razor 组件(.razor 扩展名)。我在 youtube 上观看了“ASP.NET Core 3.0 中的 Razor 组件介绍 - Daniel Roth”视频作为入门指南,并得出以下结论:
<div class="">
<input type="text" placeholder="Search..." @bind="@searchValue">
<button @onclick="Search">Search</button>
</div>
@count
@code {
string searchValue;
int count;
void Search()
{
var x = searchValue;
count++;
}
}
我的问题是,@onclick 按钮没有调用 Search 方法。我见过这种语法的几种不同变体,我都试过了。我提到的视频是
<button onclick="@Search">Search</btton>
但我发现现在onclick 前面需要@ 符号。我已经看到在方法名称前面包含和不包含 @ 符号。如果我不包含它,它会编译并运行,但按钮不会执行任何操作。如果我包含它,我会收到错误消息:
Cannot convert method group 'Search' to non-delegate type 'object'. Did you intend to invoke the method?
我发现这个 BlazorFiddle (https://blazorfiddle.com/s/aoa87v05) 是一个快速测试平台,发现同时添加:
<button @onclick="@SomeAction">Click Me</button>
<button @onclick="SomeAction">Click Me</button>
工作正常。所以我不确定我在这里做错了什么。 (也许这个 blazor fiddle 使用的是旧版本?)
如有任何帮助,我们将不胜感激。
作为参考,这里是调用它的 .cshtml 页面:
@page
@using WebPortal.ComponentLibrary.Common
@model WebPortal.Pages.Reporting.ReportingModel
@{
ViewData["Title"] = "Reports";
}
<div class="text-center">
<h1 class="display-4">Welcome to the Web Portal</h1>
<component type="typeof(SearchBar)" render-mode="static" />
</div>
我已经尝试了渲染模式的每个选项,但没有成功。
我也已经添加了“services.AddServerSideBlazor()”和“endpoints.MapBlazorHub();”到 Startup.cs 页面。
PS:作为旁注问题,没什么大不了的,我看到一些对使用语法
调用的组件的引用<SearchBar />
,但这对我不起作用。那已经被删除了吗?我更喜欢这种语法,因为它看起来更简洁。
您似乎将 Razor 和服务端页面与 Blazor 混淆了。你想开发什么?如果是 Blazor,请观看最新的 Blazor 视频并开始部署标准 Blazor 模板。您的代码在 BLAZOR 页面中有效。