.NET 帮助

Razor C#(对开发人员的工作原理)

发布 2023年五月30日
分享:

Razor 是一种服务器端标记语言,用于使用 .NET Core 和 .NET Framework 创建动态网页。它主要与 ASP.NET Core 结合使用。Razor 页面是 ASP.NET Core 的一个新方面,它提供了一种简洁明了的方式来组织应用程序中的代码,减少了代码重复的问题。Razor 结合了服务器端使用 C# 或 VB (Visual Basic) 使用 HTML 创建网页内容。

本教程将指导你在 Visual Studio 中使用 Razor 和 C# 创建一个基本应用程序。让我们开始!

先决条件

在我们进入 Razor 世界之前,请确保您已安装以下设备:

  1. .NET Core SDK

2.Visual Studio

这些都是必要的,因为它们提供了 Razor 视图引擎和本教程将使用的项目模板。此外,它们还可以在多个操作系统上运行,这意味着无论你使用的是 Windows、Linux 还是 macOS,都可以继续学习。

第 1 步 创建新的 Razor Pages 项目

打开 Microsoft Visual Studio 并按照以下步骤操作:

1.点击 "文件">"新建">"项目"。

2.在项目模板选择界面,选择 "Blazor 服务器应用程序"。

![Razor C#(如何为开发人员工作) 图 1](/static-assets/pdf/blog/razor-csharp/razor-csharp-1.webp)

3.将项目命名为 "IronPDFExample",然后点击 "创建"。

![Razor C#(如何为开发人员工作) 图 2](/static-assets/pdf/blog/razor-csharp/razor-csharp-2.webp)

4.从下拉菜单中选择".NET 7.0 "或更高版本。

![Razor C#(如何为开发人员工作) 图 3](/static-assets/pdf/blog/razor-csharp/razor-csharp-3.webp)

现在您有了一个新的 Razor Pages 项目。

了解 Razor 语法和文件

Razor文件使用".cshtml "文件扩展名,结合了C#和MySQL。 (因此 "cs) 和 HTML。如果我们使用 Visual Basic,文件扩展名将变为 .vbhtml

在解决方案资源管理器中,找到并打开扩展名为"Index.cshtml"的.cshtml文件。在这里,你会看到 HTML 代码和 C# 代码的组合。这种混合是通过 Razor 解析器实现的。

剃刀语法

剃须刀语法 是 HTML 和服务器的组合。服务器代码是 C# 或 VB 代码。Razor 代码用 @ 符号表示,它在 HTML 发送到客户端之前在服务器上执行。因此,没有 C#

一个简单的 Razor 语法示例:

<p>The current time is @DateTime.Now</p>
<p>The current time is @DateTime.Now</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> The current time is @DateTime.Now</p>
VB   C#

在本代码示例中,@DateTime.Now 是 Razor 代码。它会在服务器上执行,并在发送到客户端之前用当前日期和时间替换。

剃刀视图

Razor中的 "视图 "一词对应于任何旨在向用户展示信息的网页。Razor视图引擎负责向用户呈现HTML页面。

@page
@model IndexModel
@{
    ViewData ["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
@page
@model IndexModel
@{
    ViewData ["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
page model ReadOnly Property () As IndexModel
	ViewData ("Title") = "Home page"
End Property

'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<div class="text-center"> <h1 class="display-4"> Welcome</h1> <p> Learn about <a href="https://docs.microsoft.com/aspnet/core"> building Web apps @with ASP.NET Core</a>.</p> </div>
VB   C#

使用 Razor 标记动态内容

Razor Markup 允许我们在 HTML 标记中插入服务器端代码。我们可以使用各种代码结构,如代码块、内联表达式和 HTML 编码表达式。

内联表达

内联表达式使用以下代码将结果直接输出到 HTML 中:

<p>Hello, my name is @Model.Name</p>
<p>Hello, my name is @Model.Name</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> Hello, my name is @Model.Name</p>
VB   C#

这里,"@Model.Name "是一个内联表达式,用于从传递给 Razor 视图的模型中输出 Name 属性的值。

代码块

代码块是在服务器上运行的代码段:

@{
    var name = "IronPDF";
}
<p>Hello, my name is @name</p>
@{
    var name = "IronPDF";
}
<p>Hello, my name is @name</p>
@
If True Then
	Dim name = "IronPDF"
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> Hello, my name is @name</p>
VB   C#

在本代码示例中,Razor 代码在 之间。{}是一个代码块。

控制结构

我们还可以在 Razor 页面中使用 if 语句和循环等控制结构:

@{
    var count = 5;
}

@if(count > 3){
    <p>The count is greater than 3.</p>
}
@{
    var count = 5;
}

@if(count > 3){
    <p>The count is greater than 3.</p>
}
@
If True Then
	Dim count = 5
End If

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@if(count > 3)
'{
'	<p> The count is greater than 3.</p>
'}
VB   C#

在上述代码示例中,"if "语句是在服务器上运行的服务器端代码的一部分,其输出被插入到生成的 HTML 页面中。

Switch Statement

开关语句是 C# 编程语言中的一种条件控制结构。它们可以在代码块中使用。

@{
    var fileFormat = "PDF";
    var message = "";

    switch (fileFormat) 
    {
        case "PDF":
            message = "You selected PDF.";
            break;
        default:
            message = "Invalid selection.";
            break;
    }
}

<p>@message</p>
@{
    var fileFormat = "PDF";
    var message = "";

    switch (fileFormat) 
    {
        case "PDF":
            message = "You selected PDF.";
            break;
        default:
            message = "Invalid selection.";
            break;
    }
}

<p>@message</p>
@
If True Then
	Dim fileFormat = "PDF"
	Dim message = ""

	Select Case fileFormat
		Case "PDF"
			message = "You selected PDF."
		Case Else
			message = "Invalid selection."
	End Select
End If

'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> @message</p>
VB   C#

Razor 中的 Hello World

任何编程语言中最简单的程序之一就是 "Hello World"。在 Razor 中,您可以用一个简单的内联表达式显示 "Hello World",如下例所示:

<p>@("Hello World")</p>
<p>@("Hello World")</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> @("Hello World")</p>
VB   C#

Razor 中的 #### 循环

Razor语法允许你编写循环,例如foreach语句。假设你有一个想在网页上显示的姓名列表。你可以用Razor语法中的foreach语句来实现。

@{
    var names = new List<string>{"John", "Doe", "Smith"};
}

@foreach(var name in names)
{
    <p>@name</p>
}
@{
    var names = new List<string>{"John", "Doe", "Smith"};
}

@foreach(var name in names)
{
    <p>@name</p>
}
@
If True Then
	Dim names = New List(Of String) From {"John", "Doe", "Smith"}
End If

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@foreach(var name in names)
'{
'	<p> @name</p>
'}
VB   C#

这个 foreach 语句循环遍历列表中的每个名字,并将其输出到网页上。

了解标签助手

ASP.NET MVC中的标签帮助器可让服务器端代码在Razor文件中创建和渲染HTML元素。它们有点像HTML帮助器,但语法更类似于HTML。它们将Razor视图中的HTML类元素转换成HTML标记发送到客户端浏览器。请看以下锚标签助手的代码示例:

<a asp-controller="Home" asp-action="Index">Home</a>
<a asp-controller="Home" asp-action="Index">Home</a>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<a asp-controller="Home" asp-action="Index"> Home</a>
VB   C#

处理用户互动

Razor页面使用处理程序方法来管理用户交互。例如,为了处理表单提交,我们可以在Razor页面相应的页面模型文件中创建一个名为 "OnPostAsync "的方法。

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    // Perform some operation here

    return RedirectToPage("./Index");
}
public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    // Perform some operation here

    return RedirectToPage("./Index");
}
Public Async Function OnPostAsync() As Task(Of IActionResult)
	If Not ModelState.IsValid Then
		Return Page()
	End If

	' Perform some operation here

	Return RedirectToPage("./Index")
End Function
VB   C#

Razor 中的评论

Razor也支持C#风格的注释。请记住,Razor注释是服务器端的,这意味着它们不会发送到浏览器。它们看起来像这样

@* This is a Razor comment *@
@* This is a Razor comment *@
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@* This is a Razor comment *@
VB   C#

这是一条多行评论:

@*
    This is a multi-line Razor comment.
    It's useful when you have a lot to say.
*@
@*
    This is a multi-line Razor comment.
    It's useful when you have a lot to say.
*@
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@* This is a multi-line Razor comment.It's useful @when you have a lot @to say. *@
VB   C#

Razor 视图和页面可包含 HTML 注释。这些注释在发送到浏览器的 HTML 输出中可见。

<!-- This is an HTML comment -->
<!-- This is an HTML comment -->
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<!-- This is an HTML comment -- >
VB   C#

向剃刀页面传递模型

Razor允许从服务器向页面传递模型。@model 指令用于指定传递对象的类型。如以下示例所示,该模型属性可在 Razor 页面中访问:

@page
@model ExampleModel

<h2>@Model.Title</h2>
<p>@Model.Description</p>
@page
@model ExampleModel

<h2>@Model.Title</h2>
<p>@Model.Description</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@page @model ExampleModel <h2> @Model.Title</h2> <p> @Model.Description</p>
VB   C#

在 Razor 中使用 IronPDF 生成 PDF

IronPDF 是一个流行的库,允许开发人员生成 HTML 创建的 PDF 文件在.NET中,它可以打印文件、图像,甚至是现有的网页。它是创建报告、发票和其他任何需要标准打印格式文档的绝佳工具。IronPDF 可在 ASP.NET MVC 和 ASP.NET Razor Pages 框架内完美运行。

安装

首先,您需要安装 IronPDF 软件包。您可以通过 Visual Studio 中的 NuGet 包管理器控制台进行安装。运行以下命令

:PackageInstall

创建一个简单的 PDF

现在,让我们用Razor页面中的HTML代码创建一个简单的PDF。首先,在 Razor 页面顶部导入 IronPDF 命名空间。

@using IronPdf;
@using IronPdf;
Dim IronPdf As [using]
VB   C#

然后,您就可以使用 IronPDF 创建 PDF。比方说,我们在 Razor 页面上有一个按钮,点击后将创建一个简单的 PDF。

在页面模型文件的相应处理程序中,我们可以添加以下代码:

@page "/pdf"
@using IronPdf;
@inject IJSRuntime JS

<PageTitle>Create PDF</PageTitle>

<h1>Create PDF</h1>

<div class="form-outline">
    <button class="btn btn-primary mt-3" @onclick="CreatePDF">Create PDF</button>
</div>

@code {
    private string htmlString { get; set; }

    private async Task CreatePDF()
    {

        var Renderer = new IronPdf.ChromePdfRenderer();
        Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A2;

        var doc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");

        using var Content = new DotNetStreamReference(stream: doc.Stream);

        await JS.InvokeVoidAsync("SubmitHTML", "ironpdf.pdf", Content);
    }
}
@page "/pdf"
@using IronPdf;
@inject IJSRuntime JS

<PageTitle>Create PDF</PageTitle>

<h1>Create PDF</h1>

<div class="form-outline">
    <button class="btn btn-primary mt-3" @onclick="CreatePDF">Create PDF</button>
</div>

@code {
    private string htmlString { get; set; }

    private async Task CreatePDF()
    {

        var Renderer = new IronPdf.ChromePdfRenderer();
        Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A2;

        var doc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");

        using var Content = new DotNetStreamReference(stream: doc.Stream);

        await JS.InvokeVoidAsync("SubmitHTML", "ironpdf.pdf", Content);
    }
}
Private page "/pdf" [using] IronPdf
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: inject IJSRuntime JS <PageTitle> Create PDF</PageTitle> <h1> Create PDF</h1> <div class="form-outline"> <button class="btn btn-primary mt-3" onclick="CreatePDF"> Create PDF</button> </div> @code
"btn btn-primary mt-3" onclick="CreatePDF"> Create PDF</button> </div> code
Private Friend IJSRuntime As inject
	Private Property htmlString() As String

	Private Async Function CreatePDF() As Task

		Dim Renderer = New IronPdf.ChromePdfRenderer()
		Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A2

		Dim doc = Renderer.RenderUrlAsPdf("https://ironpdf.com/")

		Dim Content = New DotNetStreamReference(stream:= doc.Stream)

		Await JS.InvokeVoidAsync("SubmitHTML", "ironpdf.pdf", Content)
	End Function
End Class
VB   C#

输出端

Razor C#(如何为开发人员工作) 图 4

Razor C#(如何为开发人员工作) 图 5

结论

您已经成功学习了 Razor C# 的基础知识,并发现了如何集成 IronPDF 在应用程序中生成 PDF 文件。您首先要在 Visual Studio 中创建一个新项目,然后学习如何使用 Razor 语法创建动态网页。您还将了解如何使用 IronPDF 从 HTML 代码甚至完整的 Razor 视图生成 PDF。

现在,当您继续创建更高级的应用程序时,您可以利用 IronPDF 提供的强大功能。您可以试用 IronPDF 的以下功能 免费的.如果您觉得它很有价值,可以购买起价为 $749 的许可证。

< 前一页
Vim for Windows(开发人员如何使用)
下一步 >
C# 等待几秒(开发者如何操作)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,746,704 查看许可证 >