C#怎么创建Blazor应用_C# Blazor前端开发入门方法教程【实战】
使用CLI创建Blazor项目需注意模板名准确,避免使用已弃用的blazor。文件名必须PascalCase且与@page指令匹配。事件处理函数参数类型需正确,否则静默失败。StateHasChanged()不应滥用,仅在非组件线程修改状态时使用,否则可能掩盖数据回退问题。
刚开始接触Blazor时,很多人都会选择用命令行来创建项目,这确实是最轻量、最可控的方式。但这里有几个细节,一旦忽略,后续可能会遇到不少麻烦。比如,选错了项目模板,或者忽略了文件命名与路由的匹配规则,等到组件不渲染、状态不更新时,排查起来就相当头疼了。
用 CLI 创建 Blazor Server 或 WebAssembly 项目
用命令行创建项目,可以说是最轻量也最可控的方式了。但需要注意,模板名必须准确,大小写和连字符都不能出错:
dotnet new blazorserver -n MyBlazorApp用于创建 Server 模式,这种模式依赖 SignalR,在服务端进行渲染。dotnet new blazorwasm -n MyBlazorApp用于创建 WebAssembly 模式,这是纯前端方案,.NET 代码直接在浏览器中运行。
这里要留个心,千万别用 blazor 这个模糊的模板名,它已经被弃用了。另外,-n 参数也别忘了加,否则生成的项目会默认叫 WebApplication1,很容易和已有项目混淆。创建完成后,进入目录执行 dotnet run,看到控制台输出 Now listening on: https://localhost:7055,就说明启动成功了。
@page 和组件文件名必须严格匹配
Blazor 的路由注册机制比较特别,它不依赖文件路径,而是靠 @page 指令和文件名(首字母必须大写)来共同完成。常见的错误有两个:
一个是新建了 counter.razor(小写的 c),同时写了 @page "/counter",结果浏览器虽然能访问,但组件就是不渲染,控制台还会报 Failed to find a valid digest in the index.html。另一个是写了 @page "/Counter",但文件名却是 Counter.razor,这样路由虽然能命中,但 currentCount 变量却不会响应式更新,原因是组件类名生成失败了。
正确的做法是:文件名必须采用 PascalCase 命名法,比如 Counter.razor。@page 后面的路径可以自定义,但组件标签名(例如 )会自动从文件名推导。这里有个小建议:不要手动去修改类名或添加 partial 关键字,因为 .razor 编译器会自动生成这些。
事件处理函数签名错一个字母就静默失败
Blazor 的 @onclick 这类事件绑定,编译时不会报错,但参数类型一旦写错,点击就会完全没反应。比如:
private void IncrementCount(MouseEventArgs e)是正确的写法,它能获取到按键的详细信息。- 如果写成
private void IncrementCount(ClickEventArgs e),这就错了,因为ClickEventArgs这个类根本不存在。方法不会被调用,而且控制台也不会有任何提示。 private void IncrementCount()也是正确的,但这样做就拿不到事件上下文了。
其他常见的事件参数类型还有 KeyboardEventArgs(对应 @onkeypress)、ChangeEventArgs(对应 @onchange)以及通用的 EventArgs。如果拿不准,最稳妥的办法是去查阅微软官方文档中 Event handling 的页面,确认好拼写和命名空间。
StateHasChanged() 不是万能解药,乱用反而掩盖问题
当发现 UI 没有刷新时,第一反应不应该是立即加上 StateHasChanged(),而是先检查一下,是否在非组件线程里修改了状态。这几种情况很典型:
- 在
Task.Run(() => { currentCount++; })里修改变量,因为是异步任务,所以必须显式调用StateHasChanged(),否则 UI 不会更新。 - 在
async Task FetchData()里,等待完异步操作再修改currentCount,这时就不需要手动调用StateHasChanged(),因为 Blazor 会自动触发重渲染。 - 在
OnInitializedAsync生命周期里改完值就调用StateHasChanged(),这其实是多余的,因为该生命周期结束后,Blazor 本身就会触发一次刷新。
真正需要警惕的是另一种情况:加了 StateHasChanged() 后 UI 确实刷新了,但数据又“回退”了。这往往说明你在多个地方重复初始化或覆盖了状态,问题根本不出在渲染机制上。这才是真正需要排查的地方。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Blender 是免费开源的三维创作套件,在 Windows 上提供建模、雕刻、材质、动画、物理模拟、合成、跟踪、视频剪辑及 Cycles、EEVEE 渲染工具。它适合个人创作者、学生和小型工作室,
Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,
AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。













