Membuat UI yang dapat digunakan kembali menggunakan Razor proyek pustaka kelas di ASP.NET Core
Oleh Rick Anderson
Razor tampilan, halaman, pengontrol, model halaman, Razor komponen, Komponen tampilan, dan model data dapat dibangun ke dalam Razor pustaka kelas (RCL). RCL dapat dikemas dan digunakan kembali. Aplikasi dapat menyertakan RCL dan mengambil alih tampilan dan halaman yang dikandungnya. Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan.
Untuk informasi tentang cara mengintegrasikan npm dan webpack ke dalam proses build untuk RCL, lihat Membangun aset web klien untuk Pustaka Kelas AndaRazor.
Membuat pustaka kelas yang berisi Razor UI
- Dari Visual Studio pilih Buat proyek baru.
- Pilih Razor Pustaka>Kelas Berikutnya.
- Beri nama pustaka (misalnya, "RazorClassLib"), >Buat. Untuk menghindari tabrakan nama file dengan pustaka tampilan yang dihasilkan, pastikan nama pustaka tidak berakhiran
.Views
. - Pilih Halaman dukungan dan tampilan jika Anda memerlukan pustaka untuk berisi halaman dan/atau tampilan. Secara default, hanya Razor komponen yang didukung. Pilih Buat.
Razor Templat Pustaka Kelas default ke Razor pengembangan komponen secara default. Opsi Halaman dukungan dan tampilan mendukung halaman dan tampilan. Untuk informasi selengkapnya tentang dukungan RCL di Blazor, lihat Menggunakan komponen ASP.NET Core Razor dari Razor pustaka kelas (RCL).
Tambahkan Razor file ke RCL.
Templat ASP.NET Core mengasumsikan konten RCL ada di Areas
folder . Lihat tata letak Halaman RCL di bawah ini untuk membuat RCL yang mengekspos konten ~/Pages
, bukan ~/Areas/Pages
.
Mereferensikan konten RCL
RCL dapat dirujuk dengan:
- Paket NuGet. Lihat Membuat paket NuGet dan menambahkan paket dotnet dan Membuat dan menerbitkan paket NuGet.
{ProjectName}.csproj
. Lihat referensi dotnet-add.
Mengganti tampilan, tampilan parsial, dan halaman
Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan. Misalnya, tambahkan WebApp1/Areas/MyFeature/Pages/Page1.cshtml
ke WebApp1, dan Page1 di WebApp1 akan lebih diutamakan daripada Page1 di RCL.
Dalam unduhan sampel, ganti nama WebApp1/Areas/MyFeature2
menjadi WebApp1/Areas/MyFeature
prioritas pengujian.
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
Salin tampilan parsial ke WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Perbarui markup untuk menunjukkan lokasi baru. Buat dan jalankan aplikasi untuk memverifikasi versi aplikasi dari sebagian sedang digunakan.
Jika RCL menggunakan Razor Halaman, aktifkan Razor layanan Halaman dan titik akhir di aplikasi hosting:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Tata letak Halaman RCL
Untuk mereferensikan konten RCL seolah-olah itu adalah bagian dari folder aplikasi Pages
web, buat proyek RCL dengan struktur file berikut:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Misalkan RazorUIClassLib/Pages/Shared
berisi dua file parsial: _Header.cshtml
dan _Footer.cshtml
. Tag <partial>
dapat ditambahkan ke _Layout.cshtml
file:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Tambahkan file ke folder proyek Pages
RCL untuk menggunakan _Layout.cshtml
file dari aplikasi web host:
@{
Layout = "_Layout";
}
Membuat RCL dengan aset statis
RCL mungkin memerlukan aset statis pendamping yang dapat direferensikan oleh RCL atau aplikasi penggunaan RCL. ASP.NET Core memungkinkan pembuatan RCL yang menyertakan aset statis yang tersedia untuk aplikasi yang mengonsumsi.
Untuk menyertakan aset pendamping sebagai bagian dari RCL, buat wwwroot
folder di pustaka kelas dan sertakan file yang diperlukan dalam folder tersebut.
Saat mengemas RCL, semua aset pendamping dalam wwwroot
folder secara otomatis disertakan dalam paket.
dotnet pack
Gunakan perintah daripada versi nuget pack
NuGet.exe .
Menambahkan aset web klien ke proses build
Mengintegrasikan aset web klien ke dalam alur build bersifat nontrivial. Lihat Membangun aset web klien untuk Pustaka Kelas Anda Razor untuk informasi selengkapnya.
Mengecualikan aset statis
Untuk mengecualikan aset statis, tambahkan jalur pengecualian yang diinginkan ke $(DefaultItemExcludes)
grup properti dalam file proyek. Pisahkan entri dengan titik koma (;
).
Dalam contoh berikut, lib.css
lembar gaya di wwwroot
folder tidak dianggap sebagai aset statis dan tidak disertakan dalam RCL yang diterbitkan:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrasi typescript
Untuk menyertakan file TypeScript dalam RCL:
Referensi paket
Microsoft.TypeScript.MSBuild
NuGet dalam proyek.Catatan
Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.
Tempatkan file TypeScript (
.ts
) di luarwwwroot
folder. Misalnya, tempatkan file dalamClient
folder.Konfigurasikan output build TypeScript untuk
wwwroot
folder . Atur properti diTypescriptOutDir
dalamPropertyGroup
file proyek:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Sertakan target TypeScript sebagai dependensi
PrepareForBuildDependsOn
target dengan menambahkan target berikut di dalamPropertyGroup
file proyek:<PrepareForBuildDependsOn> CompileTypeScript; GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn) </PrepareForBuildDependsOn>
Menggunakan konten dari RCL yang dirujuk
File yang disertakan dalam wwwroot
folder RCL diekspos ke RCL atau aplikasi yang mengkonsumsi di bawah awalan _content/{PACKAGE ID}/
. Misalnya, pustaka dengan nama Razor.Class.Lib
rakitan dan tanpa <PackageId>
ditentukan dalam file proyeknya menghasilkan jalur ke konten statis di _content/Razor.Class.Lib/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file proyek untuk {PACKAGE ID}
.
Aplikasi yang menggunakan mereferensikan aset statis yang disediakan oleh pustaka dengan <script>
, <style>
, <img>
, dan tag HTML lainnya. Aplikasi yang menggunakan harus mengaktifkan dukungan file statis di:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Saat menjalankan aplikasi yang menggunakan dari output build (dotnet run
), aset web statis diaktifkan secara default di lingkungan Pengembangan. Untuk mendukung aset di lingkungan lain saat menjalankan dari output build, panggil UseStaticWebAssets pembangun host di Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
UseStaticWebAssets
Panggilan tidak diperlukan saat menjalankan aplikasi dari output yang diterbitkan (dotnet publish
).
Alur pengembangan multi-proyek
Saat aplikasi yang mengonsumsi berjalan:
- Aset dalam RCL tetap berada di folder aslinya. Aset tidak dipindahkan ke aplikasi yang mengonsumsi.
- Setiap perubahan dalam folder RCL
wwwroot
tercermin dalam aplikasi yang mengkonsumsi setelah RCL dibangun kembali dan tanpa membangun kembali aplikasi yang mengkonsumsi.
Saat RCL dibuat, manifes diproduksi yang menjelaskan lokasi aset web statis. Aplikasi yang menggunakan membaca manifes pada runtime untuk menggunakan aset dari proyek dan paket yang dirujuk. Saat aset baru ditambahkan ke RCL, RCL harus dibangun kembali untuk memperbarui manifesnya sebelum aplikasi yang menggunakan dapat mengakses aset baru.
Terbitkan
Saat aplikasi diterbitkan, aset pendamping dari semua proyek dan paket yang direferensikan disalin ke dalam wwwroot
folder aplikasi yang diterbitkan di bawah _content/{PACKAGE ID}/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file {PACKAGE ID}
proyek saat memeriksa wwwroot
folder untuk aset yang diterbitkan.
Sumber Daya Tambahan:
Razor tampilan, halaman, pengontrol, model halaman, Razor komponen, Komponen tampilan, dan model data dapat dibangun ke dalam Razor pustaka kelas (RCL). RCL dapat dikemas dan digunakan kembali. Aplikasi dapat menyertakan RCL dan mengambil alih tampilan dan halaman yang dikandungnya. Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan.
Untuk informasi tentang cara mengintegrasikan npm dan webpack ke dalam proses build untuk Razor Pustaka Kelas, lihat Membangun aset web klien untuk Pustaka Kelas AndaRazor.
Membuat pustaka kelas yang berisi Razor UI
- Dari Visual Studio pilih Buat proyek baru.
- Pilih Razor Pustaka>Kelas Berikutnya.
- Beri nama pustaka (misalnya, "RazorClassLib"), >Buat. Untuk menghindari tabrakan nama file dengan pustaka tampilan yang dihasilkan, pastikan nama pustaka tidak berakhiran
.Views
. - Pilih Halaman dukungan dan tampilan jika Anda perlu mendukung tampilan. Secara default, hanya Razor Halaman yang didukung. Pilih Buat.
Templat Razor Pustaka Kelas (RCL) default ke Razor pengembangan komponen secara default. Opsi Halaman dukungan dan tampilan mendukung halaman dan tampilan.
Tambahkan Razor file ke RCL.
Templat ASP.NET Core mengasumsikan konten RCL ada di Areas
folder . Lihat tata letak Halaman RCL di bawah ini untuk membuat RCL yang mengekspos konten ~/Pages
, bukan ~/Areas/Pages
.
Mereferensikan konten RCL
RCL dapat dirujuk dengan:
- Paket NuGet. Lihat Membuat paket NuGet dan menambahkan paket dotnet dan Membuat dan menerbitkan paket NuGet.
{ProjectName}.csproj
. Lihat referensi dotnet-add.
Mengganti tampilan, tampilan parsial, dan halaman
Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan. Misalnya, tambahkan WebApp1/Areas/MyFeature/Pages/Page1.cshtml
ke WebApp1, dan Page1 di WebApp1 akan lebih diutamakan daripada Page1 di RCL.
Dalam unduhan sampel, ganti nama WebApp1/Areas/MyFeature2
menjadi WebApp1/Areas/MyFeature
prioritas pengujian.
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
Salin tampilan parsial ke WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Perbarui markup untuk menunjukkan lokasi baru. Buat dan jalankan aplikasi untuk memverifikasi versi aplikasi dari sebagian sedang digunakan.
Jika RCL menggunakan Razor Halaman, aktifkan Razor layanan Halaman dan titik akhir di aplikasi hosting:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Tata letak Halaman RCL
Untuk mereferensikan konten RCL seolah-olah itu adalah bagian dari folder aplikasi Pages
web, buat proyek RCL dengan struktur file berikut:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Misalkan RazorUIClassLib/Pages/Shared
berisi dua file parsial: _Header.cshtml
dan _Footer.cshtml
. Tag <partial>
dapat ditambahkan ke _Layout.cshtml
file:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Tambahkan file ke folder proyek Pages
RCL untuk menggunakan _Layout.cshtml
file dari aplikasi web host:
@{
Layout = "_Layout";
}
Membuat RCL dengan aset statis
RCL mungkin memerlukan aset statis pendamping yang dapat direferensikan oleh RCL atau aplikasi penggunaan RCL. ASP.NET Core memungkinkan pembuatan RCL yang menyertakan aset statis yang tersedia untuk aplikasi yang mengonsumsi.
Untuk menyertakan aset pendamping sebagai bagian dari RCL, buat wwwroot
folder di pustaka kelas dan sertakan file yang diperlukan dalam folder tersebut.
Saat mengemas RCL, semua aset pendamping dalam wwwroot
folder secara otomatis disertakan dalam paket.
dotnet pack
Gunakan perintah daripada versi nuget pack
NuGet.exe .
Mengecualikan aset statis
Untuk mengecualikan aset statis, tambahkan jalur pengecualian yang diinginkan ke $(DefaultItemExcludes)
grup properti dalam file proyek. Pisahkan entri dengan titik koma (;
).
Dalam contoh berikut, lib.css
lembar gaya di wwwroot
folder tidak dianggap sebagai aset statis dan tidak disertakan dalam RCL yang diterbitkan:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrasi typescript
Untuk menyertakan file TypeScript dalam RCL:
Referensi paket
Microsoft.TypeScript.MSBuild
NuGet dalam proyek.Catatan
Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.
Tempatkan file TypeScript (
.ts
) di luarwwwroot
folder. Misalnya, tempatkan file dalamClient
folder.Konfigurasikan output build TypeScript untuk
wwwroot
folder . Atur properti diTypescriptOutDir
dalamPropertyGroup
file proyek:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Sertakan target TypeScript sebagai dependensi
PrepareForBuildDependsOn
target dengan menambahkan target berikut di dalamPropertyGroup
file proyek:<PrepareForBuildDependsOn> CompileTypeScript; GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn) </PrepareForBuildDependsOn>
Menggunakan konten dari RCL yang dirujuk
File yang disertakan dalam wwwroot
folder RCL diekspos ke RCL atau aplikasi yang mengkonsumsi di bawah awalan _content/{PACKAGE ID}/
. Misalnya, pustaka dengan nama Razor.Class.Lib
rakitan dan tanpa <PackageId>
ditentukan dalam file proyeknya menghasilkan jalur ke konten statis di _content/Razor.Class.Lib/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file proyek untuk {PACKAGE ID}
.
Aplikasi yang menggunakan mereferensikan aset statis yang disediakan oleh pustaka dengan <script>
, <style>
, <img>
, dan tag HTML lainnya. Aplikasi yang menggunakan harus mengaktifkan dukungan file statis di:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Saat menjalankan aplikasi yang menggunakan dari output build (dotnet run
), aset web statis diaktifkan secara default di lingkungan Pengembangan. Untuk mendukung aset di lingkungan lain saat menjalankan dari output build, panggil UseStaticWebAssets pembangun host di Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Catatan: .NET 6 hanya memerlukan panggilan builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets
. Untuk informasi lebih lanjut, lihat masalah GitHub ini.
UseStaticWebAssets
Panggilan tidak diperlukan saat menjalankan aplikasi dari output yang diterbitkan (dotnet publish
).
Alur pengembangan multi-proyek
Saat aplikasi yang mengonsumsi berjalan:
- Aset dalam RCL tetap berada di folder aslinya. Aset tidak dipindahkan ke aplikasi yang mengonsumsi.
- Setiap perubahan dalam folder RCL
wwwroot
tercermin dalam aplikasi yang mengkonsumsi setelah RCL dibangun kembali dan tanpa membangun kembali aplikasi yang mengkonsumsi.
Saat RCL dibuat, manifes diproduksi yang menjelaskan lokasi aset web statis. Aplikasi yang menggunakan membaca manifes pada runtime untuk menggunakan aset dari proyek dan paket yang dirujuk. Saat aset baru ditambahkan ke RCL, RCL harus dibangun kembali untuk memperbarui manifesnya sebelum aplikasi yang menggunakan dapat mengakses aset baru.
Terbitkan
Saat aplikasi diterbitkan, aset pendamping dari semua proyek dan paket yang direferensikan disalin ke dalam wwwroot
folder aplikasi yang diterbitkan di bawah _content/{PACKAGE ID}/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file {PACKAGE ID}
proyek saat memeriksa wwwroot
folder untuk aset yang diterbitkan.
Sumber Daya Tambahan:
Razor tampilan, halaman, pengontrol, model halaman, Razor komponen, Komponen tampilan, dan model data dapat dibangun ke dalam Razor pustaka kelas (RCL). RCL dapat dikemas dan digunakan kembali. Aplikasi dapat menyertakan RCL dan mengambil alih tampilan dan halaman yang dikandungnya. Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan.
Melihat atau mengunduh kode sampel (cara mengunduh)
Membuat pustaka kelas yang berisi Razor UI
- Dari Visual Studio pilih Buat proyek baru.
- Pilih Razor Pustaka>Kelas Berikutnya.
- Beri nama pustaka (misalnya, "RazorClassLib"), >Buat>Berikutnya. Untuk menghindari tabrakan nama file dengan pustaka tampilan yang dihasilkan, pastikan nama pustaka tidak berakhiran
.Views
. - Pilih Kerangka Kerja Target. Centang ☑ Halaman dukungan dan tampilan untuk mendukung tampilan. Secara default, hanya Razor komponen yang didukung. Pilih Buat.
Templat Razor pustaka kelas (RCL) default ke Razor pengembangan komponen secara default. Opsi Halaman dukungan dan tampilan mendukung halaman dan tampilan.
Tambahkan Razor file ke RCL.
Templat ASP.NET Core mengasumsikan konten RCL ada di Areas
folder . Lihat Tata letak Halaman RCL untuk membuat RCL yang mengekspos konten ~/Pages
, bukan ~/Areas/Pages
.
Mereferensikan konten RCL
RCL dapat dirujuk dengan:
- Paket NuGet. Lihat Membuat paket NuGet dan menambahkan paket dotnet dan Membuat dan menerbitkan paket NuGet.
{ProjectName}.csproj
. Lihat referensi dotnet-add.
Mengganti tampilan, tampilan parsial, dan halaman
Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan. Misalnya, tambahkan WebApp1/Areas/MyFeature/Pages/Page1.cshtml
ke WebApp1, dan Page1 di WebApp1 akan lebih diutamakan daripada Page1 di RCL.
Dalam unduhan sampel, ganti nama WebApp1/Areas/MyFeature2
menjadi WebApp1/Areas/MyFeature
prioritas pengujian.
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
Salin tampilan parsial ke WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Perbarui markup untuk menunjukkan lokasi baru. Buat dan jalankan aplikasi untuk memverifikasi versi aplikasi dari sebagian sedang digunakan.
Tata letak Halaman RCL
Untuk mereferensikan konten RCL seolah-olah itu adalah bagian dari folder aplikasi Pages
web, buat proyek RCL dengan struktur file berikut:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Misalkan RazorUIClassLib/Pages/Shared
berisi dua file parsial: _Header.cshtml
dan _Footer.cshtml
. Tag <partial>
dapat ditambahkan ke _Layout.cshtml
file:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Tambahkan file ke folder proyek Pages
RCL untuk menggunakan _Layout.cshtml
file dari aplikasi web host:
@{
Layout = "_Layout";
}
Membuat RCL dengan aset statis
RCL mungkin memerlukan aset statis pendamping yang dapat direferensikan oleh RCL atau aplikasi penggunaan RCL. ASP.NET Core memungkinkan pembuatan RCL yang menyertakan aset statis yang tersedia untuk aplikasi yang mengonsumsi.
Untuk menyertakan aset pendamping sebagai bagian dari RCL, buat wwwroot
folder di pustaka kelas dan sertakan file yang diperlukan dalam folder tersebut.
Saat mengemas RCL, semua aset pendamping dalam wwwroot
folder secara otomatis disertakan dalam paket.
dotnet pack
Gunakan perintah daripada versi nuget pack
NuGet.exe .
Mengecualikan aset statis
Untuk mengecualikan aset statis, tambahkan jalur pengecualian yang diinginkan ke $(DefaultItemExcludes)
grup properti dalam file proyek. Pisahkan entri dengan titik koma (;
).
Dalam contoh berikut, lib.css
lembar gaya di wwwroot
folder tidak dianggap sebagai aset statis dan tidak disertakan dalam RCL yang diterbitkan:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrasi typescript
Untuk menyertakan file TypeScript dalam RCL:
Referensi paket
Microsoft.TypeScript.MSBuild
NuGet dalam proyek.Catatan
Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.
Tempatkan file TypeScript (
.ts
) di luarwwwroot
folder. Misalnya, tempatkan file dalamClient
folder.Konfigurasikan output build TypeScript untuk
wwwroot
folder . Atur properti diTypescriptOutDir
dalamPropertyGroup
file proyek:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Sertakan target TypeScript sebagai dependensi
ResolveCurrentProjectStaticWebAssets
target dengan menambahkan target berikut di dalamPropertyGroup
file proyek:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Menggunakan konten dari RCL yang dirujuk
File yang disertakan dalam wwwroot
folder RCL diekspos ke RCL atau aplikasi yang mengkonsumsi di bawah awalan _content/{PACKAGE ID}/
. Misalnya, pustaka dengan nama Razor.Class.Lib
rakitan dan tanpa <PackageId>
ditentukan dalam file proyeknya menghasilkan jalur ke konten statis di _content/Razor.Class.Lib/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file proyek untuk {PACKAGE ID}
.
Aplikasi yang menggunakan mereferensikan aset statis yang disediakan oleh pustaka dengan <script>
, <style>
, <img>
, dan tag HTML lainnya. Aplikasi yang menggunakan harus mengaktifkan dukungan file statis di Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Saat menjalankan aplikasi yang menggunakan dari output build (dotnet run
), aset web statis diaktifkan secara default di lingkungan Pengembangan. Untuk mendukung aset di lingkungan lain saat menjalankan dari output build, panggil UseStaticWebAssets
pembangun host di Program.cs
:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
UseStaticWebAssets
Panggilan tidak diperlukan saat menjalankan aplikasi dari output yang diterbitkan (dotnet publish
).
Alur pengembangan multi-proyek
Saat aplikasi yang mengonsumsi berjalan:
- Aset dalam RCL tetap berada di folder aslinya. Aset tidak dipindahkan ke aplikasi yang mengonsumsi.
- Setiap perubahan dalam folder RCL
wwwroot
tercermin dalam aplikasi yang mengkonsumsi setelah RCL dibangun kembali dan tanpa membangun kembali aplikasi yang mengkonsumsi.
Saat RCL dibuat, manifes diproduksi yang menjelaskan lokasi aset web statis. Aplikasi yang menggunakan membaca manifes pada runtime untuk menggunakan aset dari proyek dan paket yang dirujuk. Saat aset baru ditambahkan ke RCL, RCL harus dibangun kembali untuk memperbarui manifesnya sebelum aplikasi yang menggunakan dapat mengakses aset baru.
Terbitkan
Saat aplikasi diterbitkan, aset pendamping dari semua proyek dan paket yang direferensikan disalin ke dalam wwwroot
folder aplikasi yang diterbitkan di bawah _content/{PACKAGE ID}/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file {PACKAGE ID}
proyek saat memeriksa wwwroot
folder untuk aset yang diterbitkan.
Sumber Daya Tambahan:
Razor tampilan, halaman, pengontrol, model halaman, Razor komponen, Komponen tampilan, dan model data dapat dibangun ke dalam Razor pustaka kelas (RCL). RCL dapat dikemas dan digunakan kembali. Aplikasi dapat menyertakan RCL dan mengambil alih tampilan dan halaman yang dikandungnya. Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan.
Melihat atau mengunduh kode sampel (cara mengunduh)
Membuat pustaka kelas yang berisi Razor UI
- Dari menu File Visual Studio, pilih Proyek Baru>.
- Pilih ASP.NET Core Web Application.
- Beri nama pustaka (misalnya, "RazorClassLib") >OK. Untuk menghindari tabrakan nama file dengan pustaka tampilan yang dihasilkan, pastikan nama pustaka tidak berakhiran
.Views
. - Verifikasi ASP.NET Core 2.1 atau yang lebih baru dipilih.
- Pilih Razor Pustaka>Kelas OK.
RCL memiliki file proyek berikut:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
Tambahkan Razor file ke RCL.
Templat ASP.NET Core mengasumsikan konten RCL ada di Areas
folder . Lihat Tata letak Halaman RCL untuk membuat RCL yang mengekspos konten ~/Pages
, bukan ~/Areas/Pages
.
Mereferensikan konten RCL
RCL dapat dirujuk dengan:
- Paket NuGet. Lihat Membuat paket NuGet dan menambahkan paket dotnet dan Membuat dan menerbitkan paket NuGet.
{ProjectName}.csproj
. Lihat referensi dotnet-add.
Panduan: Membuat proyek RCL dan menggunakan dari Razor proyek Pages
Anda dapat mengunduh proyek lengkap dan mengujinya daripada membuatnya. Unduhan sampel berisi kode dan tautan tambahan yang membuat proyek mudah diuji. Anda dapat meninggalkan umpan balik dalam masalah GitHub ini dengan komentar Anda tentang sampel unduhan versus instruksi langkah demi langkah.
Menguji aplikasi unduhan
Jika Anda belum mengunduh aplikasi yang telah selesai dan lebih suka membuat proyek penelusuran, lewati ke bagian berikutnya.
Buka file .sln
di Visual Studio. Jalankan aplikasi.
Ikuti petunjuk di Uji WebApp1
Membuat RCL
Di bagian ini, RCL dibuat. Razor file ditambahkan ke RCL.
Buat proyek RCL:
- Dari menu File Visual Studio, pilih Proyek Baru>.
- Pilih ASP.NET Core Web Application.
- Beri nama aplikasi RazorUIClassLib>OK.
- Verifikasi ASP.NET Core 2.1 atau yang lebih baru dipilih.
- Pilih Razor Pustaka>Kelas OK.
- Razor Tambahkan file tampilan parsial bernama
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
.
Menambahkan Razor file dan folder ke proyek
Ganti markup dengan
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
kode berikut:<h3>_Message.cshtml partial view.</h3> <p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>
Ganti markup dengan
RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtml
kode berikut:@page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <h2>Hello from a Razor UI class library!</h2> <p> From RazorUIClassLib\Areas\MyFeature\Pages\Page1.cshtml</p> <partial name="_Message" />
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diperlukan untuk menggunakan tampilan parsial (<partial name="_Message" />
). Daripada menyertakan direktif@addTagHelper
, Anda dapat menambahkan_ViewImports.cshtml
file. Contohnya:dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
Untuk informasi selengkapnya tentang
_ViewImports.cshtml
, lihat Mengimpor Direktif BersamaBangun pustaka kelas untuk memverifikasi tidak ada kesalahan kompilator:
dotnet build RazorUIClassLib
Output build berisi RazorUIClassLib.dll
dan RazorUIClassLib.Views.dll
. RazorUIClassLib.Views.dll
berisi konten yang dikompilasi Razor .
Razor Menggunakan pustaka UI dari Razor proyek Pages
Razor Buat aplikasi web Pages:
Dari Penjelajah Solusi, klik kanan solusi >Tambahkan>Proyek Baru.
Pilih ASP.NET Core Web Application.
Beri nama aplikasi WebApp1.
Verifikasi ASP.NET Core 2.1 atau yang lebih baru dipilih.
Pilih Aplikasi>Web OK.
Dari Penjelajah Solusi, klik kanan pada WebApp1 dan pilih Atur sebagai Proyek StartUp.
Dari Penjelajah Solusi, klik kanan pada WebApp1 dan pilih Bangun Dependensi Proyek Dependensi>.
Periksa RazorUIClassLib sebagai dependensi WebApp1.
Dari Penjelajah Solusi, klik kanan pada WebApp1 dan pilih Tambahkan>Referensi.
Dalam dialog Manajer Referensi, periksa RazorUIClassLib>OK.
Jalankan aplikasi.
Uji WebApp1
Telusuri untuk /MyFeature/Page1
memverifikasi bahwa Razor pustaka kelas UI sedang digunakan.
Mengganti tampilan, tampilan parsial, dan halaman
Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan. Misalnya, tambahkan WebApp1/Areas/MyFeature/Pages/Page1.cshtml
ke WebApp1, dan Page1 di WebApp1 akan lebih diutamakan daripada Page1 di RCL.
Dalam unduhan sampel, ganti nama WebApp1/Areas/MyFeature2
menjadi WebApp1/Areas/MyFeature
prioritas pengujian.
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
Salin tampilan parsial ke WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Perbarui markup untuk menunjukkan lokasi baru. Buat dan jalankan aplikasi untuk memverifikasi versi aplikasi dari sebagian sedang digunakan.
Tata letak Halaman RCL
Untuk mereferensikan konten RCL seolah-olah itu adalah bagian dari folder aplikasi Pages
web, buat proyek RCL dengan struktur file berikut:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Misalkan RazorUIClassLib/Pages/Shared
berisi dua file parsial: _Header.cshtml
dan _Footer.cshtml
. Tag <partial>
dapat ditambahkan ke _Layout.cshtml
file:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Razor tampilan, halaman, pengontrol, model halaman, Razor komponen, Komponen tampilan, dan model data dapat dibangun ke dalam Razor pustaka kelas (RCL). RCL dapat dikemas dan digunakan kembali. Aplikasi dapat menyertakan RCL dan mengambil alih tampilan dan halaman yang dikandungnya. Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan.
Melihat atau mengunduh kode sampel (cara mengunduh)
Membuat pustaka kelas yang berisi Razor UI
- Dari Visual Studio pilih Buat proyek baru.
- Pilih Razor Pustaka>Kelas Berikutnya.
- Beri nama pustaka (misalnya, "RazorClassLib"), >Buat. Untuk menghindari tabrakan nama file dengan pustaka tampilan yang dihasilkan, pastikan nama pustaka tidak berakhiran
.Views
. - Pilih Halaman dukungan dan tampilan jika Anda perlu mendukung tampilan. Secara default, hanya Razor Halaman yang didukung. Pilih Buat.
Templat Razor pustaka kelas (RCL) default ke Razor pengembangan komponen secara default. Opsi Halaman dukungan dan tampilan mendukung halaman dan tampilan.
Tambahkan Razor file ke RCL.
Templat ASP.NET Core mengasumsikan konten RCL ada di Areas
folder . Lihat tata letak Halaman RCL di bawah ini untuk membuat RCL yang mengekspos konten ~/Pages
, bukan ~/Areas/Pages
.
Mereferensikan konten RCL
RCL dapat dirujuk dengan:
- Paket NuGet. Lihat Membuat paket NuGet dan menambahkan paket dotnet dan Membuat dan menerbitkan paket NuGet.
{ProjectName}.csproj
. Lihat referensi dotnet-add.
Mengganti tampilan, tampilan parsial, dan halaman
Saat tampilan, tampilan parsial, atau Razor Halaman ditemukan di aplikasi web dan RCL, Razor markup (.cshtml
file) di aplikasi web lebih diutamakan. Misalnya, tambahkan WebApp1/Areas/MyFeature/Pages/Page1.cshtml
ke WebApp1, dan Page1 di WebApp1 akan lebih diutamakan daripada Page1 di RCL.
Dalam unduhan sampel, ganti nama WebApp1/Areas/MyFeature2
menjadi WebApp1/Areas/MyFeature
prioritas pengujian.
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
Salin tampilan parsial ke WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Perbarui markup untuk menunjukkan lokasi baru. Buat dan jalankan aplikasi untuk memverifikasi versi aplikasi dari sebagian sedang digunakan.
Jika RCL menggunakan Razor Halaman, aktifkan Razor layanan Halaman dan titik akhir di aplikasi hosting:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
Tata letak Halaman RCL
Untuk mereferensikan konten RCL seolah-olah itu adalah bagian dari folder aplikasi Pages
web, buat proyek RCL dengan struktur file berikut:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Misalkan RazorUIClassLib/Pages/Shared
berisi dua file parsial: _Header.cshtml
dan _Footer.cshtml
. Tag <partial>
dapat ditambahkan ke _Layout.cshtml
file:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Tambahkan file ke folder proyek Pages
RCL untuk menggunakan _Layout.cshtml
file dari aplikasi web host:
@{
Layout = "_Layout";
}
Membuat RCL dengan aset statis
RCL mungkin memerlukan aset statis pendamping yang dapat direferensikan oleh RCL atau aplikasi penggunaan RCL. ASP.NET Core memungkinkan pembuatan RCL yang menyertakan aset statis yang tersedia untuk aplikasi yang mengonsumsi.
Untuk menyertakan aset pendamping sebagai bagian dari RCL, buat wwwroot
folder di pustaka kelas dan sertakan file yang diperlukan dalam folder tersebut.
Saat mengemas RCL, semua aset pendamping dalam wwwroot
folder secara otomatis disertakan dalam paket.
dotnet pack
Gunakan perintah daripada versi nuget pack
NuGet.exe .
Mengecualikan aset statis
Untuk mengecualikan aset statis, tambahkan jalur pengecualian yang diinginkan ke $(DefaultItemExcludes)
grup properti dalam file proyek. Pisahkan entri dengan titik koma (;
).
Dalam contoh berikut, lib.css
lembar gaya di wwwroot
folder tidak dianggap sebagai aset statis dan tidak disertakan dalam RCL yang diterbitkan:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrasi typescript
Untuk menyertakan file TypeScript dalam RCL:
Referensi paket
Microsoft.TypeScript.MSBuild
NuGet dalam proyek.Catatan
Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.
Tempatkan file TypeScript (
.ts
) di luarwwwroot
folder. Misalnya, tempatkan file dalamClient
folder.Konfigurasikan output build TypeScript untuk
wwwroot
folder . Atur properti diTypescriptOutDir
dalamPropertyGroup
file proyek:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Sertakan target TypeScript sebagai dependensi
ResolveCurrentProjectStaticWebAssets
target dengan menambahkan target berikut di dalamPropertyGroup
file proyek:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Menggunakan konten dari RCL yang dirujuk
File yang disertakan dalam wwwroot
folder RCL diekspos ke RCL atau aplikasi yang mengkonsumsi di bawah awalan _content/{PACKAGE ID}/
. Misalnya, pustaka dengan nama Razor.Class.Lib
rakitan dan tanpa <PackageId>
ditentukan dalam file proyeknya menghasilkan jalur ke konten statis di _content/Razor.Class.Lib/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file proyek untuk {PACKAGE ID}
.
Aplikasi yang menggunakan mereferensikan aset statis yang disediakan oleh pustaka dengan <script>
, <style>
, <img>
, dan tag HTML lainnya. Aplikasi yang menggunakan harus mengaktifkan dukungan file statis di Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Saat menjalankan aplikasi yang menggunakan dari output build (dotnet run
), aset web statis diaktifkan secara default di lingkungan Pengembangan. Untuk mendukung aset di lingkungan lain saat menjalankan dari output build, panggil UseStaticWebAssets
pembangun host di Program.cs
:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
UseStaticWebAssets
Panggilan tidak diperlukan saat menjalankan aplikasi dari output yang diterbitkan (dotnet publish
).
Alur pengembangan multi-proyek
Saat aplikasi yang mengonsumsi berjalan:
- Aset dalam RCL tetap berada di folder aslinya. Aset tidak dipindahkan ke aplikasi yang mengonsumsi.
- Setiap perubahan dalam folder RCL
wwwroot
tercermin dalam aplikasi yang mengkonsumsi setelah RCL dibangun kembali dan tanpa membangun kembali aplikasi yang mengkonsumsi.
Saat RCL dibuat, manifes diproduksi yang menjelaskan lokasi aset web statis. Aplikasi yang menggunakan membaca manifes pada runtime untuk menggunakan aset dari proyek dan paket yang dirujuk. Saat aset baru ditambahkan ke RCL, RCL harus dibangun kembali untuk memperbarui manifesnya sebelum aplikasi yang menggunakan dapat mengakses aset baru.
Terbitkan
Saat aplikasi diterbitkan, aset pendamping dari semua proyek dan paket yang direferensikan disalin ke dalam wwwroot
folder aplikasi yang diterbitkan di bawah _content/{PACKAGE ID}/
. Saat memproduksi paket NuGet dan nama rakitan tidak sama dengan ID paket (<PackageId>
dalam file proyek pustaka), gunakan ID paket seperti yang ditentukan dalam file {PACKAGE ID}
proyek saat memeriksa wwwroot
folder untuk aset yang diterbitkan.
Sumber Daya Tambahan:
ASP.NET Core