跳過到頁腳內容
.NET幫助

Razor 組件:開發者的工作原理

網頁開發這些年來已經有很大的進步,隨著現代框架和庫的出現,開發人員可以使用強大的工具來構建動態和交互式的網頁。 近年來一項獲得顯著人氣的技術是 Razor Components,它是 ASP.NET Core 中 Blazor 框架的一部分。 Razor Components 允許開發人員使用 C# 和 HTML 構建豐富的客戶端網頁應用,而無需編寫 JavaScript。 在本文中,我們將探索 Razor Components 及其如何用來創建模塊化、可重複使用和動態的網頁。

什麼是 Razor Components

Razor Components 是 ASP.NET Core 中的 UI 框架,允許開發人員使用 C# 和 HTML 的組合來構建網頁,並能夠撰寫可以在客戶端執行的服務端邏輯。Razor Components 是 Blazor 框架的一部分,這是一個客戶端網頁 UI 框架,使用 WebAssembly (Wasm) 或 SignalR 在瀏覽器中運行 C# 代碼。 Razor Components 提供了一種基於組件的架構來構建現代網頁應用,其中 UI 被劃分為更小的、自包容的組件,這些組件可以組合在一起以創建完整的網頁。

Razor Components 使用一種稱為 Razor 語法的標記語言,這是一種 C# 與 HTML 的結合,允許無縫整合服務端和客戶端代碼。 Razor Components 類似於其他基於組件的 UI 框架,例如 React、Angular 和 Vue,但其關鍵區別在於它們使用 C# 編寫,並根據託管模型 (WebAssembly 或 SignalR) 運行在服務端或客戶端。

Razor Components : 如何為開發人員工作:圖2 - Blazor 是什麼以及什麼是 Razor Components?

Razor Components 的優勢

Razor Components 為網頁開發人員提供了多項優勢,包括:

可重用性

Razor Components 是自包容的元素,可以在一個網頁應用中或跨不同項目中的多個位置輕易重用。 這促進了代碼的可重用性並減少了代碼的重複,從而使網頁應用更具可維護性和可擴展性。

模塊化

Razor Components 遵循基於組件的架構,其中 UI 被劃分為更小的組件,可以組合在一起創建複雜的網頁。 這促進了模塊化,允許開發人員在單個組件中封裝 UI 和邏輯,從而更容易管理和維護代碼庫。

與 C# 的無縫整合

由於 Razor Components 使用 C# 編寫,開發人員可以利用現有的 C# 技能和知識來構建網頁應用。 這消除了學習和編寫 JavaScript 的需求,這對已經熟悉 C# 的開發人員來說是個顯著的優勢。

服務端和客戶端執行

Razor Components 可以根據託管模型在服務端或客戶端執行。 這為開發人員提供了選擇適合其應用的執行模型的靈活性,具體考量因素如性能、安全性和用戶體驗。

實時通信

Razor Components 可以使用 SignalR,一個實時通信庫,來建立客戶端和服務端之間的雙向通信。 這使得網頁應用能夠實現實時更新和通知,提供一個響應迅速且互動性強的用戶體驗。

可擴展性

Razor Components 高度可擴展,允許開發人員創建自定義的組件、庫和模板。 這能使開發人員構建滿足其網頁應用特定需求的量身定制解決方案。

開始使用 Razor Component

要開始使用 Razor Components,你需要在系統上安裝 .NET Core 3.0 或更高版本。 使用 Visual Studio 或 .NET Core CLI 中的 Blazor 模板創建一個新的 ASP.NET Core 项目。

dotnet new blazorserver

Razor Components : 如何為開發人員工作:圖3

@page "/counter"

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

在這個例子中,我們有一個名為“Counter”的 Razor 組件,其中包含一個按鈕,點擊時會增加 currentCount 變數。 @code 區塊用來定義此組件的 C# 代碼。

Razor Components : 如何為開發人員工作:圖4

創建自定義 Razor 組件

在項目中創建一個名為“Components”的新文件夾來存儲你的 Razor Components。

在“Components”文件夾內,添加一個帶有“.razor”擴展名的新 Razor Component 文件。 此文件將包含你的組件的 C# 和 HTML 代碼。

打開 Razor Component 文件,使用 Razor 語法定義你的組件。 Razor 語法允許你在單個文件中結合 C# 和 HTML 代碼,從而易於創建動態網頁。 例如,你可以這樣定義一個簡單的 Razor Component:

<h1>Hello, World!</h1>
<p>This is a Razor Component.</p>

@code {
    // C# code for the component can be added here
}

你現在可以通過在 HTML 標記中包含組件的標籤名來在網頁應用的其他部分使用你的 Razor Component。 例如,你可以這樣在主 Razor 頁面中使用組件:

<MyComponent />

你還可以使用組件參數向 Razor Component 傳遞數據。 組件參數允許你從父組件向子組件傳遞數據,從而使組件之間能夠通信。 例如,你可以這樣在你的 Razor Component 中定義一個參數:

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

然後在 Razor Component 類中這樣使用這個組件參數:

<p>@Message</p>

並從父組件向組件傳遞數據,如下所示:

<MyComponent Message="Hello from parent component!" />

Razor Components 還可以包含可以在客戶端執行的服務端邏輯。例如,你可以使用 C# 代碼直接從 Razor Components 撰寫處理邏輯、發送 HTTP 請求、處理用戶事件及執行其他服務端操作。 這讓你無需編寫任何 JavaScript 代碼即可創建動態和互動的網頁。

創建可重用的 Razor Components

Razor Components 的一個好處是能創建可重用的 UI 組件,這些組件可以在多個頁面或應用中使用。 要創建一個可重用的組件,你可以在項目的“Shared”文件夾中創建一個新的“.razor”文件。

例如,假設我們想創建一個顯示書籍列表的組件。 我們可以在“Shared”文件夾中創建一個名為 BookList.razor 的新文件,如下所示:

Razor Components : 如何為開發人員工作:圖5 - 生成的類

我們可以這樣定義 Razor 組件:

@typeparam TItem

@foreach (var book in Books)
{
    <p>@book.Title by @book.Author</p>
}

@code {
    [Parameter]
    public List<TItem> Books { get; set; }
}

在這個例子中,我們有一個名為 BookList 的組件,該組件將一本“Book”對象列表作為 Razor 參數。 使用 @foreach 循環來遍歷列表並顯示每本書的標題和作者。

在下一部分中,我們將探討如何使用 IronPDF 與 Razor Components 從網頁應用中創建 PDF 文件。

使用 IronPDF 和 Razor Components

IronPDF 是一個 C# 庫,允許開發人員從 HTML、CSS 和 JavaScript 創建 PDF 文件。 它是基於 Chromium(支撐 Google Chrome 的開源瀏覽器)構建的。 使用 IronPDF,開發人員可以輕鬆地將 Razor Components 轉換為 HTML,並從中生成 PDF 文件。

IronPDF 精於將HTML 轉換為 PDF,確保版式和樣式保持不變。 這對於從基於網頁的內容(如報告、發票和文檔)生成 PDF 特別有用。 HTML 文件、URL 和 HTML 字符串可以輕鬆轉換為 PDF 文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

安裝 IronPDF

要使用 IronPDF 和 Razor Components,我們首先需要安裝 IronPDF NuGet 包。 要做到這一點,請按照以下步驟操作:

  1. 在 Visual Studio 中打開項目。
  2. 右鍵單擊項目並選擇“管理 NuGet 包”。
  3. 搜尋“IronPDF”並選擇“IronPDF package”。
  4. 點擊“安裝”來安裝包。

安裝 IronPDF NuGet 包後,我們可以在 Razor Components 中使用它。

Razor Components : 如何為開發人員工作:圖6

安裝包後,你可以使用 IronPdf.ChromePdfRenderer 類從 Razor Component 創建新的 PDF 文件。

要在 ASP.NET Core Razor Components 中創建 PDF 文件,你可以將 HTML 語法字符串、HTML 文件或 URL 傳遞給 IronPdf.ChromePdfRenderer 方法。 例如,假設我們想創建一個包含計數器增量的 PDF 文件。

var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>My PDF #" + currentCount + "</h1>");
pdf.SaveAs("myPdf" + currentCount + ".pdf");
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>My PDF #" + currentCount + "</h1>");
pdf.SaveAs("myPdf" + currentCount + ".pdf");
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>My PDF #" & currentCount & "</h1>")
pdf.SaveAs("myPdf" & currentCount & ".pdf")
$vbLabelText   $csharpLabel

在此例子中,我們創建了一個新的 ChromePdfRenderer 實例。 然後我們創建了一個新的 PdfDocument 實例,並將字符串傳遞給 RenderHtmlAsPdf 方法。 最後,我們使用 PdfDocument.SaveAs 方法將生成的 PDF 文件保存到磁盤。

在此示例中,我們修改了計數器組件。 我們修改了計數器按鈕的 onClick 函數,當它被點擊時,將創建包含計數器數量的 PDF。

結論

在本文中,我們探討了如何使用 Razor Components 和 IronPDF 從網頁應用創建 PDF 文件。 我們介紹了 Razor Components 的基礎知識,如何安裝和使用 IronPDF,並提供了代碼示例以幫助你入門。

Razor Components 和 IronPDF 是用於創建強大和功能豐富的網頁應用的有力工具。 通過結合這些技術,開發人員可以創建功能強大且視覺上吸引人的網頁應用。

IronPDF 也可以用來將 razor 頁面和 URL 轉換為 PDF,以及讀取、創建和操作 PDF 文檔。 IronPDF 甚至允許對 PDF 進行更細緻的控制,例如向現有或新生成的 PDF 文件中添加標題、頁腳、頁碼、數字簽名、密碼和高級 PDF 操作功能。 It is free for development but requires a free trial license or commercial license for production.

常見問題解答

什麼是 Razor 元件?

Razor 元件是 ASP.NET Core 中的一個 UI 框架,允許開發者使用 C# 和 HTML 的組合來構建網頁,並包含可以在客戶端執行的伺服器端邏輯。它們是 Blazor 框架的一部分,支持基於元件的架構。

Razor 元件如何提升網頁開發?

Razor 元件通過允許開發者使用 C# 和 HTML 來創建動態和交互式網頁應用程序而無需依賴 JavaScript,簡化了網頁開發。這樣可以更無縫地整合伺服器端邏輯和客戶端互動性。

如何從 Razor 元件生成 PDF?

要從 Razor 元件生成 PDF,您可以使用 IronPDF,這允許將元件的 HTML 輸出轉換為 PDF 格式。這是通過使用 IronPdf.ChromePdfRenderer 類將元件渲染為 PDF 文件來實現的。

使用 Razor 元件有什麼好處?

Razor 元件提供了多種好處,包括可復用性、模組化、與 C# 的無縫整合、伺服器端和客戶端執行、與 SignalR 的實時通信,以及高度的可擴展性。

如何在我的專案中安裝 IronPDF?

要將 IronPDF 添加到您的專案中,請使用 Visual Studio 中的 NuGet 套件管理器。搜索 IronPDF 套件並安裝它,為您的 Razor 元件啟用 PDF 生成功能。

Razor 元件可以同時在伺服器端和客戶端執行嗎?

是的,Razor 元件可以根據所選的託管模型在伺服器端和客戶端執行。這種靈活性允許開發者根據特定項目的需求優化應用程序的性能和安全性。

Razor 元件如何促進可重用性?

Razor 元件通過自包含來促進可重用性,這使得它們可以在應用程序內的多個地方或不同項目中使用。這減少了代碼的重複並提高了可維護性和可擴展性。

從網頁內容生成 PDF 的一些使用案例是什麼?

使用 IronPDF 從網頁內容生成 PDF 有助於創建標準化的文檔,如報告、發票和文檔,確保內容在不同平台上的佈局和格式保持一致。

如何使用 Razor 元件創建自定義 UI 元素?

您可以通過使用 Razor 語法在 '.razor' 文件中定義它們來創建自定義 UI 元素。這允許開發者結合 C# 和 HTML,創建動態且可重用的元件,以滿足特定應用程序需求。

Razor 元件中的參數如何工作?

在 Razor 元件中,參數用於從父元件向子元件傳遞數據。這是通過 [Parameter] 屬性來促進的,實現不同應用程序部分之間的通信和數據共享。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。