如何在不同的文件中拆分 C# 和 HTML 的 Blazor WASM 组件代码?
How to split Blazor WASM components code of C# and HTML in different files?
我有一些 Web 开发背景,主要是 ASP MVC 和 JavaScript 以及 Angular。
目前,我正在学习 Blazor WASM,但我有点“困惑”,因为我找不到任何有关如何将以下代码拆分为两个文件的示例。
这是默认模板中一个组件的示例代码:
Counter.razor
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
是否有任何方法可以拆分成 Angular Web 组件? .html 和.ts?在这种情况下 .razor 和 .razor.cs?
Counter.razor - HTML
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
Counter.razor.cs - C#
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
我在 Angular 中开发了相对复杂的 SPA,在 ASP MVC 中开发了站点,当你的项目很小的时候,我认为这个解决方案是可以的,但我不喜欢混合JS/C# 代码在同一 HTML 页面中。我过去遇到过一些像这样的复杂情况,并且变得难以维护。
知道如何拆分吗?谢谢
是的,您只需要在代码隐藏 .cs 文件中继承 ComponentBase,然后在 .razor 文件顶部继承 class。
c# 文件:
public class MyComponent : ComponentBase
剃须刀文件:
@inherits MyComponent
这篇文章有更详尽的解释,虽然它是从 2018 年开始的,所以可能有一些过时的部分。 https://gunnarpeipman.com/blazor-code-behind/
您可以创建部分 classes 以将代码与 HTML:
分开
[编辑:感谢 Enet 的信息]
如果将文件命名为 [classname].razor.cs,该文件将成为解决方案资源管理器中的单个对象。今天午饭前我学到了两件事;是时候放慢速度了。
如果您在名为 Index.razor
的 Blazor 项目中有一个页面(或组件)
编辑:部分 class 支持需要 .Net Core 3.1(根据 Federico Navarrete)。
在同目录下创建同名的C#class
一开始编译不了,所以要加partial:
public partial class Index
{
...
}
我更喜欢将我的所有代码放在一个部分中 class 因为 .razor 页面没有像 .cs 文件那样的方法和属性的下拉菜单。
我有一些 Web 开发背景,主要是 ASP MVC 和 JavaScript 以及 Angular。
目前,我正在学习 Blazor WASM,但我有点“困惑”,因为我找不到任何有关如何将以下代码拆分为两个文件的示例。
这是默认模板中一个组件的示例代码:
Counter.razor
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
是否有任何方法可以拆分成 Angular Web 组件? .html 和.ts?在这种情况下 .razor 和 .razor.cs?
Counter.razor - HTML
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
Counter.razor.cs - C#
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
我在 Angular 中开发了相对复杂的 SPA,在 ASP MVC 中开发了站点,当你的项目很小的时候,我认为这个解决方案是可以的,但我不喜欢混合JS/C# 代码在同一 HTML 页面中。我过去遇到过一些像这样的复杂情况,并且变得难以维护。
知道如何拆分吗?谢谢
是的,您只需要在代码隐藏 .cs 文件中继承 ComponentBase,然后在 .razor 文件顶部继承 class。
c# 文件:
public class MyComponent : ComponentBase
剃须刀文件:
@inherits MyComponent
这篇文章有更详尽的解释,虽然它是从 2018 年开始的,所以可能有一些过时的部分。 https://gunnarpeipman.com/blazor-code-behind/
您可以创建部分 classes 以将代码与 HTML:
分开[编辑:感谢 Enet 的信息] 如果将文件命名为 [classname].razor.cs,该文件将成为解决方案资源管理器中的单个对象。今天午饭前我学到了两件事;是时候放慢速度了。
如果您在名为 Index.razor
的 Blazor 项目中有一个页面(或组件)编辑:部分 class 支持需要 .Net Core 3.1(根据 Federico Navarrete)。
在同目录下创建同名的C#class
一开始编译不了,所以要加partial:
public partial class Index
{
...
}
我更喜欢将我的所有代码放在一个部分中 class 因为 .razor 页面没有像 .cs 文件那样的方法和属性的下拉菜单。