Gunakan berbilang Blazor WebAssemblys dalam MVC Teras ASP.NET
Persekitaran
- Visual Studio
-
- Studio Visual 2019
- .NET
-
- .NET 5.0
Pada mulanya
Petua ini menganggap pengetahuan anda tentang "Running Blazor WebAssembly in ASP.NET Core MVC View", jadi jika anda tidak tahu bagaimana menjalankan Perhimpunan Blazor di MVC Teras ASP.NET, lihat artikel itu.
Kaedah sebelumnya membolehkan anda meletakkan hanya satu Perhimpunan Blazor, jadi Petua ini membolehkan anda meletakkan lebih daripada satu.
Buat dua Perhimpunan Blazor
Anda boleh memastikan bahawa kedua-dua Perhimpunan Blazor berjalan masing-masing, jadi anda boleh melakukan apa sahaja Perhimpunan Blazor. Sila buat supaya anda dapat melihat perbezaannya buat masa ini. Di sini, warna menu kiri diubah untuk keadaan awal projek.
Terbitkan setiap projek dan sediakan fail.
buat projek MVC Teras ASP.NET
Ini juga berdasarkan petua sebelum membuat projek.
Setelah anda membuat projek anda, tambahkan 'dalam Microsoft.AspNetCore.Components.WebAssembly.Server
NuGet.'
Betulkan _Layout.cshtml
Ini adalah sama seperti kali terakhir.
<!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>
<!-- 以下同じなので省略 -->
Tambah halaman untuk dua Perhimpunan Blazor
Kali ini, kita akan memiliki dua pandangan untuk menunjukkan masing-masing Blazor Assembly.
HomeController
tambah dua tindakan kepada . Sekali lagi, bahagian pelayan tidak melakukan apa-apa khususnya, jadi hanya kembalikan pandangan.
RumahPengawal.cs
// 省略
namespace AspNetCoreMvc.Controllers
{
public class HomeController : Controller
{
// 省略
// 追加
public IActionResult Blazor1()
{
return View();
}
public IActionResult Blazor2()
{
return View();
}
}
}
Klik kanan tindakan untuk menambah pandangan. Tolong pergi untuk dua.
Pandangan dicipta.
Pertama, menubuhkan Perhimpunan Blazor yang pertama.
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>
}
Apa yang berbeza dari yang sebelumnya ialah kandungan tag <base href="/" />
asas diperbuat daripada . <base href="/Home/Blazor1/" />
Sekiranya anda mengubah jalan ini, Blazor Assembly akan dapat merujuk setiap fail, seperti dll, sebagai akar jalan ini dalam jalan relatif.
Walau bagaimanapun, spesifikasi Blazor Assembly semasa menentukan bahawa pengawal dan tindakan mempunyai laluan yang sama, kerana jika URL yang ditentukan oleh tindakan MVC tidak sepadan dengan laluan relatif dari tuan rumah pangkalan ini, Perhimpunan Blazor akan gagal apabila memuatkan.
Dengan cara ini, kes laluan ini terjejas, jadi jika URL secara automatik huruf kecil, ia harus huruf kecil.
Blazor2.cshtml
edit juga. Blazor1.cshtml
Sila ambil perhatian bahawa ia adalah beberapa berbeza daripada .
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>
}
Tambah pautan supaya anda boleh menavigasi ke halaman 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>
Permulaan.cs Perubahan
Laluan laluan Blazor WebAssembly berubah, jadi dayakannya untuk setiap laluan.
app.UseBlazorFrameworkFiles("/Home/Blazor1");
app.UseBlazorFrameworkFiles("/Home/Blazor2");
Blazor WebAssembly Deployment
Kali terakhir, saya meletakkan fail yang diterbitkan di wwwroot seperti itu, tetapi kerana saya menentukan laluan untuk tag asas pada setiap halaman, saya membuat folder dengan laluan yang sama di wwwroot.
Salin kandungan wwwroot fail yang diterbitkan ke setiap folder.
Seperti index.html
dahulu, ia tidak diperlukan.
Pelaksanaan
Jalankan untuk memastikan blazor WebAssembly pada setiap halaman berfungsi dengan betul.