การปรับใช้ WebAssemblys Blazor หลายตัวใน ASP.NET Core MVC
สิ่งแวดล้อม
- Visual Studio
-
- Visual Studio 2019
- .NET
-
- .NET 5.0
ทีแรก
เคล็ดลับนี้ถือว่าความรู้ของคุณเกี่ยวกับ "การเรียกใช้ Blazor WebAssembly ในมุมมอง MVC หลัก ASP.NET" ดังนั้นหากคุณไม่ทราบวิธีการเรียกใช้ Blazor Assembly บน MVC ASP.NET หลักให้ดูบทความนั้น
วิธีการก่อนหน้านี้ช่วยให้คุณสามารถวาง Blazor Assembly ได้เพียงหนึ่งชุดดังนั้นเคล็ดลับนี้จึงช่วยให้คุณสามารถวางได้มากกว่าหนึ่งชุด
สร้างแอสเซมบลีเบลซอร์สองตัว
คุณสามารถตรวจสอบให้แน่ใจว่า Blazor Assembly ทั้งสองทํางานตามลําดับเพื่อให้คุณสามารถทําอะไรก็ได้ที่ Blazor Assembly เป็น โปรดทําให้คุณสามารถเห็นความแตกต่างในขณะนี้ ที่นี่สีของเมนูด้านซ้ายมีการเปลี่ยนแปลงสําหรับสถานะเริ่มต้นของโครงการ
เผยแพร่แต่ละโครงการและจัดเตรียมไฟล์
สร้างโครงการ MVC หลัก ASP.NET
นอกจากนี้ยังขึ้นอยู่กับเคล็ดลับก่อนที่จะสร้างโครงการ
เมื่อคุณสร้างโปรเจ็กต์ของคุณแล้ว ให้เพิ่ม 'ใน Microsoft.AspNetCore.Components.WebAssembly.Server
NuGet'
แก้ไข _Layout.cshtml
นี่ก็เหมือนกับครั้งที่แล้ว
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - AspNetCoreMvc</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
@* 追加 *@
@await RenderSectionAsync("Styles", required: false)
</head>
<body>
<!-- 以下同じなので省略 -->
เพิ่มหน้าสําหรับสมัชชาเบลซอร์สองตัว
คราวนี้เราจะมีสองมุมมองเพื่อแสดงแต่ละ Blazor Assembly
HomeController
เพิ่มสองการดําเนินการลงใน อีกครั้งฝั่งเซิร์ฟเวอร์ไม่ได้ทําอะไรเป็นพิเศษดังนั้นเพียงแค่คืนมุมมอง
หน้าหลักควบคุม.cs
// 省略
namespace AspNetCoreMvc.Controllers
{
public class HomeController : Controller
{
// 省略
// 追加
public IActionResult Blazor1()
{
return View();
}
public IActionResult Blazor2()
{
return View();
}
}
}
คลิกขวาที่การกระทําเพื่อเพิ่มมุมมอง กรุณาไปสําหรับสอง
มุมมองจะถูกสร้างขึ้น
ขั้นแรก ให้จัดตั้งเบลซอร์แอสเซมบลีครั้งแรก
Blazor1.cshtml
@{
ViewData["Title"] = "Blazor1";
}
@section Styles {
<base href="/Home/Blazor1/" />
<link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="css/app.css" rel="stylesheet" />
<link href="BlazorWebAssemblySample1.styles.css" rel="stylesheet" />
}
<div id="app">Loading...</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
@section Scripts {
<script src="_framework/blazor.webassembly.js"></script>
}
สิ่งที่แตกต่างจากก่อนหน้านี้คือเนื้อหาของแท็กพื้นฐานทําจาก<base href="/" />
<base href="/Home/Blazor1/" />
ถ้าคุณเปลี่ยนเส้นทางนี้ Blazor Assembly จะสามารถอ้างอิงแต่ละแฟ้ม เช่น dll เป็นรากของเส้นทางนี้ในเส้นทางสัมพัทธ์ได้
อย่างไรก็ตาม ข้อกําหนด Blazor Assembly ปัจจุบันระบุว่าตัวควบคุมและการกระทํามีเส้นทางเดียวกัน เนื่องจากถ้า URL ที่กําหนดโดยการกระทํา MVC ไม่ตรงกับเส้นทางสัมพัทธ์จากโฮสต์ของฐานนี้ Blazor Assembly จะล้มเหลวเมื่อโหลด
โดยวิธีการที่กรณีของเส้นทางนี้ได้รับผลกระทบดังนั้นหาก URL เป็นตัวพิมพ์เล็กโดยอัตโนมัติก็ควรจะเป็นตัวพิมพ์เล็ก
Blazor2.cshtml
แก้ไขเช่นกัน Blazor1.cshtml
โปรดทราบว่ามันแตกต่างจาก
Blazor2.cshtml
@{
ViewData["Title"] = "Blazor2";
}
@section Styles {
<base href="/Home/Blazor2/" />
<link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="css/app.css" rel="stylesheet" />
<link href="BlazorWebAssemblySample2.styles.css" rel="stylesheet" />
}
<div id="app">Loading...</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
@section Scripts {
<script src="_framework/blazor.webassembly.js"></script>
}
เพิ่มลิงก์เพื่อให้คุณสามารถนําทางไปยังหน้าของ Blazor ได้
index.cshtml
@{
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>
@* 追加 *@
<ul>
<li><a asp-action="Blazor1">Blazor1</a></li>
<li><a asp-action="Blazor2">Blazor2</a></li>
</ul>
เริ่มต้น.cs การเปลี่ยนแปลง
เส้นทางของ Blazor WebAssembly มีการเปลี่ยนแปลง ดังนั้นให้เปิดใช้งานสําหรับแต่ละเส้นทาง
app.UseBlazorFrameworkFiles("/Home/Blazor1");
app.UseBlazorFrameworkFiles("/Home/Blazor2");
Blazor WebAssembly Deployment
คราวที่แล้วฉันวางไฟล์ที่เผยแพร่ใน wwwroot เหมือนเดิม แต่เนื่องจากฉันระบุเส้นทางสําหรับแท็กพื้นฐานในแต่ละหน้าฉันจึงสร้างโฟลเดอร์ที่มีเส้นทางคล้ายกันใน wwwroot
คัดลอกเนื้อหาของ wwwroot ของแฟ้มที่ประกาศไปยังแต่ละโฟลเดอร์
ก่อนหน้านี้ index.html
ไม่จําเป็นต้องใช้
การประหารชีวิต
เรียกใช้เพื่อให้แน่ใจว่า Blazor WebAssembly ในแต่ละเพจทํางานได้อย่างถูกต้อง