【问题标题】:Razor component button @onclick not calling c# methodRazor组件按钮@onclick不调用c#方法
【发布时间】:2021-10-03 15:31:55
【问题描述】:

我正在寻找开始创建一个新网站,我遇到了 blazor/razor for asp.net。我会说只是看着它,这让我非常兴奋能够摆脱所有的 javascript 框架。但是,像许多其他人一样,我在让简单的@onclick 工作时遇到问题,而且我对 blazor/razor 进行的研究越多,我就越感到困惑。正如其他人所指出的,一切似乎都在不断变化,所以我发现的资源一直自相矛盾。

首先,我尝试在 ASP.NET Core 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 前面需要 @ 符号。我已经看到方法名称前面包含和不包含 @ 符号。如果我不包含它,它会编译并运行,但按钮不会做任何事情。如果我确实包含它,我会收到错误消息:

无法将方法组“搜索”转换为非委托类型“对象”。您是否打算调用该方法?

我发现这个 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 />

,但这对我不起作用。那已经被删除了吗?我更喜欢这种语法,因为它看起来更简洁。

【问题讨论】:

  • 标准的简单代码是@onclick="IncrementCount"onclick 没有 @ 用于 JavaScript。
  • @HenkHolterman 那么在方法名前面加上@:@onclick="@IncrementCount" 不正确?按下按钮时,此方法不执行任何操作。计数没有增加。
  • 它不起作用,因为您将渲染模式设置为静态。这意味着只呈现静态 HTML(没有 js 处理程序)。 &lt;SearchBar /&gt; 不起作用,因为如果您已经在 blazor 根元素中,则只能使用此语法,而您不在。那么,你的意图是什么?您是否有现有的页面以及用 Blazor 替换某些部分的内容?
  • 我正在尝试创建一个可重用的组件,在本例中是一个搜索栏,我可以将其插入任何页面并让它呈现在我放置的位置。哪种渲染模式适合这个?我都试过了,没有任何影响。
  • @onclick="@IncrementCount" 也是正确的,因为您可以在任何 C# 名称前加上 @。但是不要这样做,它很混乱。

标签: razor blazor razor-components


【解决方案1】:

您似乎将 Razor 和 Service Side Pages 与 Blazor 混为​​一谈。你想发展什么?如果是 Blazor,请观看最新的 Blazor 视频并开始部署标准 Blazor 模板。您的代码在 BLAZOR 页面中运行。

【讨论】:

  • 做到了!我想我使用了错误的模板,我认为它们是兼容的。我切换到 Blazor 服务器应用程序并且它正在工作。谢谢!
猜你喜欢
  • 2012-08-17
  • 2013-04-12
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2015-04-27
相关资源
最近更新 更多