如何在浏览器中使用内联 C# 而不是 Javascript

Luk*_*101 0 javascript c# asp.net blazor

我刚刚发现 Microsoft 引入了 Blazor,它允许在浏览器中运行 C# 代码。当我查看一些教程时,您似乎需要 asp.net 核心后端服务器才能使其工作。如果我能在浏览器中输入 C# 代码就好了,比如:

<script>

    //C# code
    string myName = "John";
    alert(myName);

</script>
Run Code Online (Sandbox Code Playgroud)

代替

<script>

    //Javascript code
    var myName = "John";
    alert(myName);

</script>
Run Code Online (Sandbox Code Playgroud)

这能做到吗?

T.J*_*der 9

不,您不能只是将 C# 代码放在script标签中。浏览器不知道如何解析和运行 C# 代码。Blazor 所做的是将 C#(在服务器上)编译成 .Net 程序集,然后通过WebAssembly在浏览器中运行这些程序集。Blazor 介绍中的详细信息。这是一个似乎相关的摘录:

Blazor 应用程序基于组件。Blazor 中的组件是 UI 的一个元素,例如页面、对话框或数据输入表单。

...

组件类通常以带有.razor文件扩展名的 Razor 标记页面的形式编写。Blazor 中的组件正式称为 Razor 组件。Razor 是一种将 HTML 标记与 C# 代码相结合的语法,旨在提高开发人员的生产力。Razor 允许您在具有 IntelliSense 支持的同一文件中的 HTML 标记和 C# 之间切换。Razor Pages 和 MVC 也使用 Razor。与围绕请求/响应模型构建的 Razor Pages 和 MVC 不同,组件专门用于客户端 UI 逻辑和组合。

以下 Razor 标记演示了一个组件 ( Dialog.razor),它可以嵌套在另一个组件中:

<div>
    <h1>@Title</h1>

    @ChildContent

    <button @onclick="OnYes">Yes!</button>
</div>

@code {
    [Parameter]
    public string Title { get; set; }

    [Parameter]
    public RenderFragment ChildContent { get; set; }

    private void OnYes()
    {
        Console.WriteLine("Write to the console in C#! 'Yes' button was selected.");
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

在浏览器中构建并运行 Blazor WebAssembly 应用程序时:

  • C# 代码文件和 Razor 文件被编译成 .NET 程序集。
  • 程序集和 .NET 运行时被下载到浏览器。
  • Blazor WebAssembly 引导 .NET 运行时并配置运行时以加载应用程序的程序集。Blazor WebAssembly 运行时使用 JavaScript 互操作来处理 DOM 操作和浏览器 API 调用。