Blazor入門-基礎知識+vs2022自帶例程的理解

參考:
Blazor 教程 - 生成首個應用
https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/intro

Blazor基礎知識:Visual Studio 2022 中的Blazor開發入門_vs2022 blazor webassembly-CSDN博客
https://blog.csdn.net/mzl87/article/details/135543830

[問題解決][edge]你現在無法訪問 XXX.com,因為網站使用的是 HSTS。網絡錯誤和攻擊通常是暫時的,因此該頁面以后可能會恢復正常。_因為網站使用的是 hsts。網絡錯誤和攻擊通常是暫時的,因此該頁面以后可能會恢復正-CSDN博客
https://blog.csdn.net/ted_guangda/article/details/129010030

本地環境:win10, visual studio 2022 community


目錄

  • 創建項目
    • 報錯
      • ResolvePackageAssets任務意外失敗... NuGet unable to find fallback package folder xxx
      • 啟動后網頁顯示隱私錯誤 NET::ERR_CERT_INVALID
  • 目錄說明
  • 詳細說明
    • 布局
    • 網頁
      • index
      • Counter
      • FetchData

Blazor 使用 .NET 和 C# 構建全棧web應用,無需編寫JavaScript。

創建項目

創建過程全部選默認,改動2處:

  • 框架選了.Net 6.0
  • 去掉了https配置(后面解釋
    在這里插入圖片描述
    如果找不到上圖的話裝一下:
    在這里插入圖片描述
    然后點擊生成,運行:
    在這里插入圖片描述

報錯

ResolvePackageAssets任務意外失敗… NuGet unable to find fallback package folder xxx

在這里插入圖片描述
這個很簡單,去紅線所指的位置新建文件夾即可。

啟動后網頁顯示隱私錯誤 NET::ERR_CERT_INVALID

在這里插入圖片描述
一個辦法是直接在鍵盤輸入 this is unsafe (不用打回車,就這幾個字符就行)即可進入網頁:
在這里插入圖片描述
這個算個后門吧,不過因為我只是在測試,直接關掉https配置即可(前面創建項目時)。

搜解決辦法的時候還有人說換火狐瀏覽器可以,我沒有測試。我這里edge和chrome都不行。

目錄說明

在這里插入圖片描述

詳細說明

布局

整個網頁的布局寫在Shared/MainLayout.razor,如下。其中:

  • @inherits LayoutComponentBase表示將從LayoutComponentBase類繼承所有功能和屬性,用戶可以重寫以定制注入導航欄、側邊欄等組件
  • <NavMenu />實際是自定義的blazor組件,參見Shared/NavMenurazor
  • <article>是一個HTML標簽,通常包裹一個獨立的內容塊
  • @Body指明了主體內容在哪里。Pages下那些獨立的頁面會顯示在這個位置
  • 相關的css寫在同名.css文件中
    在這里插入圖片描述
@inherits LayoutComponentBase<PageTitle>BlazorApp1</PageTitle><div class="page"><div class="sidebar"><NavMenu /></div><main><div class="top-row px-4"><a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a></div><article class="content px-4">@Body</article></main>
</div>

再看一下NavMenu元件。

<div class="top-row ps-3 navbar navbar-dark"><div class="container-fluid"><a class="navbar-brand" href="">BlazorApp1</a><button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu"><span class="navbar-toggler-icon"></span></button></div>
</div><div class="@NavMenuCssClass" @onclick="ToggleNavMenu"><nav class="flex-column"><div class="nav-item px-3"><NavLink class="nav-link" href="" Match="NavLinkMatch.All"><span class="oi oi-home" aria-hidden="true"></span> Home</NavLink></div><div class="nav-item px-3"><NavLink class="nav-link" href="counter"><span class="oi oi-plus" aria-hidden="true"></span> Counter</NavLink></div><div class="nav-item px-3"><NavLink class="nav-link" href="fetchdata"><span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data</NavLink></div></nav>
</div>@code {private bool collapseNavMenu = true;private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;private void ToggleNavMenu(){collapseNavMenu = !collapseNavMenu;}
}

前面html不用看,重點看一下這句:

private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;

這句表示:如果collapseNavMenu為true,則將NavMenuCssClass設置為"collapse";否則設為null。NavMenuCssClass是側邊欄主體部分的屬性,在同名.css文件中是:

@media (min-width: 641px) {.navbar-toggler {display: none;}.collapse {/* Never collapse the sidebar for wide screens */display: block;}
}

也就是說,當窗口寬度大于641px時,通過設置.display: block; 實現了保持導航欄折疊按鈕隱藏的效果,并確保側邊欄保持展開狀態,以適應較寬屏幕設備的顯示效果。
在這里插入圖片描述

網頁

index

在這里插入圖片描述

紅圈部分對應的是:Pages/Index.razor,內容是:

@page "/"<PageTitle>Index</PageTitle><h1>Hello, world!</h1>Welcome to your new app.<SurveyPrompt Title="How is Blazor working for you?" />

說明:

  • @開頭的屬于c#代碼,@page指明了當前頁的路徑
  • <PageTitle>是blazor定義的一個組件,其實就是顯示在標題欄的名字,也就是上圖藍圈的文字
  • <SurveyPrompt>是自定義的一個組件,放在Shared/SurveyPrompt.razor,內容是:
    	<div class="alert alert-secondary mt-4"><span class="oi oi-pencil me-2" aria-hidden="true"></span><strong>@Title</strong><span class="text-nowrap">Please take our<a target="_blank" class="font-weight-bold link-dark" href="https://go.microsoft.com/fwlink/?linkid=2149017">brief survey</a></span>and tell us what you think.
    </div>@code {// Demonstrates how a parent component can supply parameters[Parameter]public string? Title { get; set; }
    }

Counter

在這里插入圖片描述
Counter頁面多加了一個按鈕,點擊這個按鈕,Current count: 后會更新點擊次數:
在這里插入圖片描述

@page "/counter"<PageTitle>Counter</PageTitle><h1>Counter</h1><p role="status">Current count: @currentCount</p><button class="btn btn-primary" @onclick="IncrementCount">Click me</button>@code {private int currentCount = 0;private void IncrementCount(){currentCount++;}
}

說明:

  • @code表示后面的花括號里包含的是c#代碼
  • 頁面上使用@ + 變量名就可以使用變量值
  • @onclick直接使用@code定義的函數

FetchData

在這里插入圖片描述
這是一個帶數據模型的頁面,先看 FetchData.razor :

@page "/fetchdata"<PageTitle>Weather forecast</PageTitle>@using BlazorApp1.Data
@inject WeatherForecastService ForecastService<h1>Weather forecast</h1><p>This component demonstrates fetching data from a service.</p>@if (forecasts == null)
{<p><em>Loading...</em></p>
}
else
{<table class="table"><thead><tr><th>Date</th><th>Temp. (C)</th><th>Temp. (F)</th><th>Summary</th></tr></thead><tbody>@foreach (var forecast in forecasts){<tr><td>@forecast.Date.ToShortDateString()</td><td>@forecast.TemperatureC</td><td>@forecast.TemperatureF</td><td>@forecast.Summary</td></tr>}</tbody></table>
}@code {private WeatherForecast[]? forecasts;protected override async Task OnInitializedAsync(){forecasts = await ForecastService.GetForecastAsync(DateTime.Now);}
}

說明:

  • @using BlazorApp1.Data是使用這個命名空間
    // Data/WeatherForecast.cs
    namespace BlazorApp1.Data
    {public class WeatherForecast{public DateTime Date { get; set; }public int TemperatureC { get; set; }public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);public string? Summary { get; set; }}
    }
    
  • inject是注入服務
    	// Data/ WeatherForecastService.cs
    namespace BlazorApp1.Data
    {public class WeatherForecastService{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate){return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = startDate.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray());}}
    }
    
  • @if中@表示是c#代碼,直接用就行,后面@foreach也是類似

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

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

相關文章

NSSCTF | [SWPUCTF 2021 新生賽]jicao

打開題目&#xff0c;發現高亮顯示了一個 php 腳本 這是腳本的內容 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;…

idea中數據庫的連接(保姆級)

點擊idea中的database 然后再點擊加號 創建 然后選擇第一欄data source 再選擇mysql 然后選擇數據庫的連接方式 再輸入密碼 這里我們本來就是localhost所有就不用改 選擇端口號 然后點擊Test Connection 測試連接 第一次連接會下載連接的文件 我們只需要 等待它下載完成就好了 …

文本批量操作指南:文本合并技巧,批量處理大量文本的方法

在數字化時代&#xff0c;文本處理成為我們日常生活和工作中不可或缺的一部分。無論是整理文檔、數據分析還是內容創作&#xff0c;我們都需要處理大量的文本數據。為了提升工作效率&#xff0c;掌握文本批量操作和合并的技巧變得尤為重要。本文將為您提供一份詳細的文本批量操…

機器學習算法應用——CART決策樹

CART決策樹&#xff08;4-2&#xff09; CART&#xff08;Classification and Regression Trees&#xff09;決策樹是一種常用的機器學習算法&#xff0c;它既可以用于分類問題&#xff0c;也可以用于回歸問題。CART決策樹的主要原理是通過遞歸地將數據集劃分為兩個子集來構建決…

力扣 256. 粉刷房子 LCR 091. 粉刷房子 python AC

動態規劃 class Solution:def minCost(self, costs):row, col len(costs), 3dp [[0] * col for _ in range(row 1)]for i in range(1, row 1):for j in range(col):dp[i][j] costs[i - 1][j - 1]if j 0:dp[i][j] min(dp[i - 1][1], dp[i - 1][2])elif j 1:dp[i][j] m…

【QT教程】QT6硬件高級編程實戰案例 QT硬件高級編程

QT6硬件高級編程實戰案例 使用AI技術輔助生成 QT界面美化視頻課程 QT性能優化視頻課程 QT原理與源碼分析視頻課程 QT QML C擴展開發視頻課程 免費QT視頻課程 您可以看免費1000個QT技術視頻 免費QT視頻課程 QT統計圖和QT數據可視化視頻免費看 免費QT視頻課程 QT性能優化視頻免…

【GoLang基礎】通道(channel)是什么?

問題引出&#xff1a; Go語言中的通道&#xff08;channel&#xff09;是什么&#xff1f; 解答&#xff1a; 通道&#xff08;channel&#xff09;是 Go 語言中用于協程&#xff08;goroutine&#xff09;之間通信和同步的機制。通道提供了一種安全、簡單且高效的方式&#x…

idea運行SpringBoot項目爆紅提示出現:Java HotSpot(TM) 64-Bit Server VM warning...讓我來看看~

在運行SpringBoot項目的時候&#xff0c;發現總有這個警告提示出現&#xff0c;有點強迫癥真的每次運行項目都很難受啊&#xff01;那么今天便來解決這個問題&#xff01; 先來看一下提示內容&#xff1a;Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none an…

FreeRTOS標準庫例程代碼

1.設備STM32F103C8T6 2.工程模板 單片機: 部分單片機的程序例程 - Gitee.comhttps://gitee.com/lovefoolnotme/singlechip/tree/master/STM32_FREERTOS/1.%E5%B7%A5%E7%A8%8B%E6%A8%A1%E6%9D%BF 3.代碼 1-FreeRTOS移植模板 #include "system.h" #include "…

C語言編程中布爾設置位掩碼示例

在C語言編程中&#xff0c;當你想使用整數&#xff08;通常是unsigned int或uint8_t, uint16_t, uint32_t等&#xff09;的位來存儲多個布爾設置時&#xff0c;你會使用位掩碼。每個設置對應于整數中的一個位&#xff0c;你可以通過位操作&#xff08;如按位與&、按位或|、…

Rust:用 Warp 庫實現 Restful API 的簡單示例

直接上代碼&#xff1a; 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…

uniap之微信公眾號支付

近來用uniapp開發H5的時候&#xff0c;需要接入支付&#xff0c;原來都是基于后端框架來做的&#xff0c;所以可謂是一路坑中過&#xff0c;今天整理下大致流程分享給大家。 先封裝util.js&#xff0c;便于后面調用 const isWechat function(){return String(navigator.userA…

隊列的實現(使用C語言)

完整代碼鏈接&#xff1a;DataStructure: 基本數據結構的實現。 (gitee.com) 目錄 一、隊列的概念&#xff1a; 二、隊列的實現&#xff1a; 使用鏈表實現隊列&#xff1a; 1.結構體設計&#xff1a; 2.初始化&#xff1a; 3.銷毀&#xff1a; 4.入隊&#xff1a; 5.…

OC foudation框架(下)的學習

OCfoudation框架&#xff08;下&#xff09; 前面學習了有關OCfoudation框架的部分內容&#xff0c;我們現在對于后面的內容繼續學習。 文章目錄 OCfoudation框架&#xff08;下&#xff09;數組&#xff08;NSArray和NSMutableArray&#xff09;對集合元素整體調用方法排序使用…

會賺錢的人都在做這件事:你了解嗎?

在我們日常生活的點滴中&#xff0c;以及在各種場合的交互中&#xff0c;利他思維始終扮演著不可或缺的角色。當我們追求合作與共贏時&#xff0c;單方面的自我立場顯然是不夠的&#xff0c;真正的關鍵在于換位思考&#xff0c;尋找并滿足對方的需求。 互利互贏的核心理念正是利…

設置docker容器時區

設置docker容器時區 查看當前系統時間 1.1 查看當前系統版本 cat /etc/issue1.2 查看當前系統時間 date查看鏡像默認時間 2.1 alpine鏡像 sudo docker run -it --rm alpine date2.2 ubuntu鏡像 sudo docker run -it --rm ubuntu date2.3 centos鏡像 sudo docker run -it --rm …

虛擬知識付費系統源碼推薦,在線教育雙十一怎么做活動?

又是一年光棍節&#xff0c;啊不是&#xff0c;剁手節。小伙伴們早就摩拳擦掌準備剁手了&#xff0c;這個時候&#xff0c;幾乎所有線上平臺都行動起來了&#xff0c;而在線教育行業也沒有閑著。如今&#xff0c;雙十一已經成為了各大在線教育公司用來變現的一個大殺器&#xf…

ruoyi-vue-pro 使用記錄(4)

ruoyi-vue-pro 使用記錄&#xff08;4&#xff09; CRM數據庫線索客戶商機合同回款產品其他 CRM 文檔 主要分為 6 個核心模塊&#xff1a;線索、客戶、商機、合同、回款、產品。 線索管理以 crm_clue 作為核心表客戶管理以 crm_customer 作為核心表商機管理以 crm_business 作…

JavaScript數組(Array)方法 - toReversed、toSorted、toSpliced

最近發現幾個數組方法&#xff0c;是一些常規方法的升級版&#xff0c;比較有意思&#xff0c;分享給大家 文章目錄 一、溫故二、知新toReversedtoSortedtoSpliced 一、溫故 我們先來回顧幾個比較常用的方法&#xff1a;reverse&#xff0c;sort&#xff0c;splice眾所周知&a…

luceda ipkiss教程 69:導出器件或者線路的三維模型

ipkiss 3.12版加入write_obj函數&#xff0c;可以直接輸出器件的三維模型。 如&#xff0c;輸出自定義的mmi的三維模型&#xff1a; 代碼如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …