C#Blazor應用-跨平臺WEB開發VB.NET

在 C# 中實現 Blazor 應用需要結合 Razor 語法和 C# 代碼,Blazor 允許使用 C# 同時開發前端和后端邏輯。以下是一個完整的 C# Blazor 實現示例,包含項目創建、基礎組件和數據交互等內容:

一、創建 Blazor 項目

  1. 使用 Visual Studio

    • 新建項目 → 選擇 “Blazor App” → 勾選 “ASP.NET?Core 托管”(可選 WebAssembly 或服務器端渲染)。
  2. 使用.NET CLI?

    dotnet new blazorwasm -n BlazorDemo  # WebAssembly客戶端渲染
    dotnet new blazorserver -n BlazorDemo  # 服務器端渲染
    

二、基礎 Blazor 組件示例(C#)

以下是一個顯示當前時間的 Blazor 組件(.razor文件):

@page "/"  // 路由路徑<h3>Blazor時間組件</h3>
<p>當前時間:@currentTime</p>
<button @onclick="UpdateTime">刷新時間</button>@code {private string currentTime;protected override void OnInitialized(){UpdateTime();}private void UpdateTime(){currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");StateHasChanged();  // 通知組件狀態更新}
}

三、數據綁定與交互

Blazor 支持雙向數據綁定和事件處理:razor

@page "/form"<h3>用戶表單</h3>
<div><label>姓名:</label><input type="text" @bind="userName" /><p>輸入的姓名:@userName</p>
</div><div><label>年齡:</label><input type="number" @bind="userAge" /><p>年齡:@userAge</p>
</div><button @onclick="SubmitForm">提交</button>@code {private string userName;private int userAge;private void SubmitForm(){if (string.IsNullOrEmpty(userName)){message = "姓名不能為空";return;}message = $"用戶 {userName},年齡 {userAge} 已提交";}private string message;
}

四、組件間通信(父子組件)

父組件(ParentComponent.razor)razor
<h3>父組件</h3>
<p>父組件消息:@parentMessage</p>
<ChildComponent @bind-ChildMessage="parentMessage" />@code {private string parentMessage = "來自父組件的初始消息";
}
子組件(ChildComponent.razor)razor
<h4>子組件</h4>
<input type="text" @bind="childMessage" />
<p>子組件接收到的消息:@childMessage</p>@code {[Parameter]public string ChildMessage { get => childMessage; set {if (childMessage != value){childMessage = value;OnChildMessageChanged.InvokeAsync(childMessage);}}}private string childMessage;[Parameter]public EventCallback<string> OnChildMessageChanged { get; set; }
}

五、HTTP 數據交互

Blazor 內置HttpClient用于 API 調用:

@page "/fetch-data"
@using System.Net.Http
@using BlazorDemo.Shared  // 假設模型在此命名空間<h3>獲取天氣數據</h3>@if (forecasts == null)
{<p><em>加載中...</em></p>
}
else
{<table class="table"><thead><tr><th>日期</th><th>溫度</th><th>摘要</th></tr></thead><tbody>@foreach (var forecast in forecasts){<tr><td>@forecast.Date</td><td>@forecast.TemperatureC &deg;C</td><td>@forecast.Summary</td></tr>}</tbody></table>
}@code {private WeatherForecast[] forecasts;// 注入HttpClient[Inject]private HttpClient Http { get; set; }protected override async Task OnInitializedAsync(){forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");}// 天氣模型(通常放在Shared項目中)public class WeatherForecast{public DateTime Date { get; set; }public int TemperatureC { get; set; }public string Summary { get; set; }public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);}
}

六、Blazor 項目結構說明

plaintext

BlazorDemo/
├── Client/                # WebAssembly客戶端項目(若選擇ASP.NET Core托管)
├── Server/                # 服務器端項目(包含API和服務)
├── Shared/                # 共享模型和接口
├── wwwroot/               # 靜態資源
├── App.razor              # 根組件
├── MainLayout.razor       # 布局組件
├── _Imports.razor         # 全局導入
├── index.html             # WebAssembly入口
└── Program.cs             # 應用程序入口

七、運行與部署

  1. 開發環境運行

    dotnet run  # 服務器端渲染
    dotnet watch run  # 啟用熱重載
    
  2. 部署到 IIS / 云服務

    • 發布項目:dotnet publish -c Release
    • WebAssembly 應用可直接部署靜態文件;服務器端應用需部署到支持.NET 的服務器(如 Azure App Service)。

核心特性總結

  • 組件化開發:通過.razor文件混合 HTML、C# 和 CSS,實現可復用 UI 組件。
  • 雙向綁定:使用@bind語法簡化表單交互(如@bind="userName")。
  • 依賴注入:通過[Inject]特性注入服務(如HttpClient、數據庫上下文)。
  • 狀態管理:使用StateHasChanged()通知組件更新 UI。
  • 跨平臺:WebAssembly 版可在瀏覽器中運行,服務器版可部署到任何支持.NET 的平臺。

通過以上示例,可快速入門 C# Blazor 開發,進一步可擴展為復雜的企業級應用。

在 Razor 語法中,輸出表達式的方式與傳統 ASP/ASPX 有所不同。以下是?<%=now%>?在 Razor 中的等效實現方法:

1. 基本語法對比

技術輸出當前時間的代碼示例
ASP/ASPX<%= Now() %>?或?<% Response.Write(Now()) %>
Razor (VB.NET)@Now?或?@DateTime.Now

2. Razor 實現示例

在 .cshtml 文件中
<p>當前時間:@Now</p><!-- 等效于 -->
<p>當前時間:@DateTime.Now</p><!-- 格式化輸出 -->
<p>格式化時間:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</p>
在代碼塊中使用
@CodeDim currentTime = DateTime.NowDim formattedTime = currentTime.ToString("yyyy年MM月dd日")
End Code<p>代碼塊中的時間:@formattedTime</p>

3. 動態表達式與 HTML 編碼

Razor 會自動對輸出內容進行 HTML 編碼,防止 XSS 攻擊:

@CodeDim userInput = "<script>alert('XSS');</script>"
End Code<!-- 輸出編碼后的內容:&lt;script&gt;alert('XSS');&lt;/script&gt; -->
<p>自動編碼:@userInput</p><!-- 若需輸出原始 HTML(需謹慎!) -->
<p>原始 HTML:@Html.Raw(userInput)</p>

4. 與傳統 ASPX 的差異

特性ASPX (<%= %>)Razor (@)
語法簡潔度較長,需顯式標記開始和結束更簡潔,使用?@?符號
代碼塊集成使用?<% %>?包裹代碼使用?@Code ... End Code
HTML 編碼需手動調用?Server.HtmlEncode自動編碼,可通過?@Html.Raw?禁用
類型推斷弱類型,需顯式轉換強類型,支持智能感知

5. 復雜表達式示例

<!-- 條件表達式 -->
<p>狀態:@If(DateTime.Now.Hour < 12, "上午", "下午")</p><!-- 方法調用 -->
@CodeFunction GetWelcomeMessage() As StringReturn "歡迎訪問,當前時間:" & DateTime.Now.ToString()End Function
End Code<p>消息:@GetWelcomeMessage()</p>

6. 在 Blazor 組件中使用

如果是 Blazor 組件(.razor 文件),語法類似,但支持雙向綁定和組件生命周期:

<p>當前時間:@CurrentTime</p>
<button @onclick="UpdateTime">刷新時間</button>@CodePrivate CurrentTime As DateTime = DateTime.NowPrivate Sub UpdateTime()CurrentTime = DateTime.NowEnd Sub
End Code

總結?Razor 通過?@?符號提供了更簡潔、安全的表達式輸出方式,同時支持強類型和智能感知,是?ASP.NET?Core 中推薦的視圖語法。對于?VB.NET?用戶,@Now?是最直接的?<%=Now%>?替代方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86100.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端的安全隱患之API惡意調用

永遠不要相信前端傳來的數據&#xff0c;對于資深開發者而言&#xff0c;這幾乎是一種本能&#xff0c;無需過多解釋。然而&#xff0c;初入職場的開發新手可能會感到困惑&#xff1a;為何要對前端傳來的數據持有如此不信任的態度&#xff1f;難道人與人之間連基本的信任都不存…

基于 Spark 實現 COS 海量數據處理

上周在組內分享了一下這個主題&#xff0c; 我覺得還是摘出一部分當文章輸出出來 分享主要包括三個方面&#xff1a; 1. 項目背景 2.Spark 原理 3. Spark 實戰 項目背景 主要是將海量日志進行多維度處理&#xff1b; 項目難點 1、數據量大&#xff08;壓縮包數量 6TB,60 億條數…

Unity3D 屏幕點擊特效

實現點擊屏幕任意位置播放點擊特效。 屏幕點擊特效 需求 現有一個需求&#xff0c;點擊屏幕任意位置&#xff0c;播放一個點擊特效。 美術已經做好了特效&#xff0c;效果如圖&#xff1a; 特效容器 首先&#xff0c;畫布是 Camera 模式&#xff0c;畫布底下有一個 UIClic…

MCU編程

MCU 編程基礎&#xff1a;概念、架構與實踐 一、什么是 MCU 編程&#xff1f; MCU&#xff08;Microcontroller Unit&#xff0c;微控制器&#xff09; 是將 CPU、內存、外設&#xff08;如 GPIO、UART、ADC&#xff09;集成在單一芯片上的小型計算機系統。MCU 編程即針對這些…

Go語言--語法基礎6--基本數據類型--數組類型(1)

Go 語言提供了數組類型的數據結構。 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列&#xff0c;這種類型可以是任意的 原始類型例如整型、字符串或者自定義類型。相對于去聲明number0,number1, ..., and number99 的變量&#xff0c;使用數組形式 numbers[0], …

左神算法之給定一個數組arr,返回其中的數值的差值等于k的子數組有多少個

目錄 1. 題目2. 解釋3. 思路4. 代碼5. 總結 1. 題目 給定一個數組arr&#xff0c;返回其中的數值的差值等于k的子數組有多少個 2. 解釋 略 3. 思路 直接用hashSet進行存儲&#xff0c;查這個值加上k后的值是否在數組中 4. 代碼 public class Problem01_SubvalueEqualk {…

自回歸(AR)與掩碼(MLM)的核心區別:續寫還是補全?

自回歸(AR)與掩碼(MLM)的核心區別:用例子秒懂 一、核心機制對比:像“續寫”還是“完形填空”? 維度自回歸(Autoregressive)掩碼語言模型(Masked LM)核心目標根據已生成的token,預測下一個token(順序生成)預測句子中被“掩碼”的token(補全缺失信息)輸入輸出輸入…

后端開發兩個月實習總結

前言 本人目前在一家小公司后端開發實習差不多兩個月了&#xff0c;現在準備離職了&#xff0c;就這兩個月的實習經歷寫下這篇文章&#xff0c;既是對自己實習的一個總結&#xff0c;也是給正在找實習的小伙伴以及未來即將進入到后端開發這個行業的同學的分享一下經驗。 一、個…

Python基礎(??FAISS?和??Chroma?)

??1. 索引與查詢性能? ??指標????FAISS????Chroma????分析????索引構建速度??72.4秒&#xff08;5551個文本塊&#xff09;91.59秒&#xff08;相同數據集&#xff09;FAISS的底層優化&#xff08;如PQ量化&#xff09;加速索引構建&#xff0c;適合批…

Windows下memcpy_s如何在Linux下使用

Windows下代碼如下 memcpy_s(pLine->ppBuf[i], m_ColorLineByte, pIn nOffset, m_ColorLineByte); 方案 1&#xff1a;使用標準 memcpy 手動檢查&#xff08;最通用&#xff09; // 檢查參數有效性 if (pLine->ppBuf[i] nullptr || pIn nullptr || m_ColorLi…

2025年數學算法與自動化控制國際會議(ICMAAC 2025)

2025年數學算法與自動化控制國際會議&#xff08;ICMAAC 2025&#xff09; 2025 International Conference on Mathematical Algorithms and Automation Control 一、大會信息 會議簡稱&#xff1a;ICMAAC 2025 大會地點&#xff1a;中國長沙 審稿通知&#xff1a;投稿后2-3日…

C語言數組介紹 -- 一維數組和二維數組的創建、初始化、下標、遍歷、存儲,C99 變長數組

目錄 1. 一維數組 1.1 數組的概念 1.2 一維數組的創建 1.3 一維數組的初始化 1.4 數組的類型 1.5 數組下標 1.5.1 數組元素的遍歷 1.5.2 數組的輸入 1.6 一維數組在內存中的存儲 1.7 sizeof 計算數組元素個數 2. 二維數組 2.1 二維數組的創建 2.2 二維數組的初始…

SpringAI + DeepSeek大模型應用開發 - 進階篇(上)

三、SpringAI 2. 哄哄模擬器 2.1 提示詞工程 提示詞工程&#xff08;Prompt Engineering&#xff09;&#xff1a;通過優化提示詞&#xff0c;使大模型生成盡可能理想的內容&#xff0c;這一過程就叫提示詞工程。 &#xff08;1&#xff09;清晰明確的指令 談談人工智能 …

Spring Boot實現異常處理

Spring Boot 提供了多種靈活的方式實現異常處理&#xff0c;以下是核心方案和最佳實踐&#xff1a; 一、基礎異常處理方案 1. ControllerAdvice ExceptionHandler&#xff08;全局處理&#xff09; ControllerAdvice public class GlobalExceptionHandler {// 處理特定異常&…

【目標檢測】IOU的概念與Python實例解析

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Vue2中如何使用vue-print-nb打印功能

插件官網地址&#xff1a;vue-print-nb - npm 1.安裝 npm install vue-print-nb --save 2.導入打印插件 //main.js import Print from vue-print-nb Vue.use(Print); 3.配置參數 4.頁面使用 <div id"printDiv">打印內容</div><el-button v-print&…

Matplotlib快速入門

目錄 基本使用 解決中文亂碼 一個坐標系繪制多個圖像 多個坐標系繪制 基本使用 什么是Matplotlib 是專門用于開發2D圖表(包括3D圖表)以漸進&#xff0c;交互式方式實現數據可視化 為什么要學習matplotlib 可視化是在整個數據挖掘的關鍵輔助工具&#xff0c;可以清晰的理解…

扣料不允許‘貨物移動’

遇到了報錯&#xff0c;不允許貨物移動 以為又是和之前一樣是訂單已經關閉&#xff0c;看是領錯料還是財務誤關的原因&#xff0c;但是co03一看訂單狀態并沒有關閉 原因就是這個CRTD 訂單只是創建了&#xff0c;但是沒有下達 找個正常的看看&#xff1a; 一般訂單創建和下達都…

【AI】全新AI測試系列之二--------AI自動化測試,提高測試效率

目錄 一、自動化測試 1、與手動測試對比 2、自動化測試流程 二、自動化測試環境搭建 三、web自動化使用AI的兩種方式 1、利用DeepSeek快速生成腳本 2、pycharm集成通義靈碼 四、通義靈碼實戰 1、使用提示詞生成代碼 2、使用pytest框架 前言&#xff1a;上一章節只要是…

npm包沖突install失敗

--legacy-peer-deps是npm&#xff08;Node.js包管理器&#xff09;的一個命令行選項&#xff0c;主要用于解決依賴沖突問題。當安裝依賴時&#xff0c;npm默認會嚴格檢查peer dependencies&#xff08;對等依賴&#xff09;的版本兼容性&#xff0c;可能導致安裝失敗。啟用此選…