Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.
Oleh Rick Anderson
Di bagian ini, Anda mengubah kelas HelloWorldController
untuk menggunakan berkas tampilan Razor. Ini secara rapi merangkum proses menghasilkan respons HTML kepada klien.
Templat tampilan dibuat menggunakan Razor. RazorTemplat tampilan berbasis-:
- Memiliki ekstensi berkas
.cshtml
. - Berikan cara elegan untuk membuat output HTML dengan C#.
Saat ini metode Index
mengembalikan string dengan pesan dalam kelas controller. Di kelas HelloWorldController
, ganti metode Index
dengan kode berikut:
public IActionResult Index()
{
return View();
}
Kode sebelumnya:
- Memanggil metode pengontrol View .
- Menggunakan templat tampilan untuk menghasilkan respons HTML.
Metode pengontrol:
- Disebut metode tindakan. Misalnya, metode aksi
Index
dalam kode sebelumnya. - Umumnya mengembalikan IActionResult atau kelas yang berasal dari ActionResult, bukan tipe seperti
string
.
Tambah tampilan
Klik kanan pada folder Tampilan , lalu Tambahkan > Folder Baru dan beri nama folder HelloWorld.
Klik kanan pada folder Views/HelloWorld , lalu Tambahkan > Item Baru.
Dalam dialog Tambahkan Item Baru , jika opsi untuk Menampilkan Semua Templat tersedia, pilihlah.
Dalam dialog Tambahkan Item Baru - MvcMovie:
- Dalam kotak pencarian di kanan atas, masukkan tampilan
- Pilih Razor Tampilan - Kosong
- Pertahankan nilai kotak Nama,
Index.cshtml
. - Pilih Tambahkan
Ganti konten Views/HelloWorld/Index.cshtml
Razor file tampilan dengan yang berikut ini:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Navigasikan ke https://localhost:{PORT}/HelloWorld
:
Metode
Index
dalamHelloWorldController
menjalankan pernyataanreturn View();
, yang menentukan bahwa metode harus menggunakan file templat tampilan untuk merender respons ke browser.Nama file templat tampilan tidak ditentukan, sehingga MVC default menggunakan file tampilan default. Saat nama file tampilan tidak ditentukan, tampilan default dikembalikan. Tampilan default memiliki nama yang sama dengan metode tindakan,
Index
dalam contoh ini. Templat/Views/HelloWorld/Index.cshtml
tampilan digunakan.Gambar berikut menunjukkan string "Halo dari Templat Tampilan kami!" yang dikodekan secara permanen dalam tampilan:
Mengubah tampilan dan halaman tata letak
Pilih tautan menu MvcMovie, Home, dan Privacy. Setiap halaman memperlihatkan tata letak menu yang sama. Tata letak menu diimplementasikan dalam Views/Shared/_Layout.cshtml
file.
Buka file Views/Shared/_Layout.cshtml
.
Templat tata letak memungkinkan:
- Menentukan tata letak kontainer HTML situs di satu tempat.
- Menerapkan tata letak kontainer HTML di beberapa halaman di situs.
Temukan garisnya @RenderBody()
.
RenderBody
adalah tempat penampung tempat semua halaman khusus tampilan yang Anda buat muncul, dibungkus di halaman tata letak. Misalnya, jika Anda memilih Privacy tautan, Views/Home/Privacy.cshtml
tampilan dirender di RenderBody
dalam metode .
Ubah judul, footer, dan tautan menu dalam file tata letak
Ganti konten Views/Shared/_Layout.cshtml
file dengan markup berikut. Perubahan disorot:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movie App</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/MvcMovie.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">Movie App</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2025 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Markup sebelumnya membuat perubahan berikut:
- Tiga kemunculan dari
MvcMovie
keMovie App
. - Elemen jangkar
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
ke<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
.
Dalam markup sebelumnya, asp-area=""
atribut Tag Helper jangkar dan nilai atribut dihilangkan karena aplikasi ini tidak menggunakan Area.
Catatan: Movies
Pengontrol belum diimplementasikan. Pada titik ini, Movie App
tautan tidak berfungsi.
Simpan perubahan dan pilih Privacy tautan. Perhatikan bagaimana judul pada tab browser menampilkan Privacy Kebijakan - Aplikasi Film alih-alih Privacy Kebijakan - MvcMovie
Pilih tautan Home.
Perhatikan bahwa judul dan teks jangkar menampilkan Aplikasi Film. Perubahan dilakukan sekali di templat tata letak dan semua halaman di situs mencerminkan teks tautan baru dan judul baru.
Periksa file Views/_ViewStart.cshtml
.
@{
Layout = "_Layout";
}
File Views/_ViewStart.cshtml
memasukkan file Views/Shared/_Layout.cshtml
ke dalam setiap tampilan. Properti Layout
dapat digunakan untuk mengatur tampilan tata letak yang berbeda, atau mengaturnya ke null
sehingga tidak ada file tata letak yang akan digunakan.
Buka file tampilan Views/HelloWorld/Index.cshtml
.
Ubah judul dan elemen <h2>
seperti yang disorot di bawah ini.
@{
ViewData["Title"] = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Judul dan <h2>
elemen sedikit berbeda sehingga jelas bagian kode mana yang mengubah tampilan.
ViewData["Title"] = "Movie List";
dalam kode di atas mengatur properti Title
kamus ViewData
ke "Daftar Film". Properti Title
digunakan dalam <title>
elemen HTML di halaman tata letak:
<title>@ViewData["Title"] - Movie App</title>
Simpan perubahan dan navigasikan ke https://localhost:{PORT}/HelloWorld
.
Perhatikan bahwa berikut ini telah berubah:
- Judul jendela browser.
- Judul utama.
- Judul sekunder.
Jika tidak ada perubahan di browser, itu bisa menjadi konten cache yang sedang dilihat. Tekan Ctrl+F5 di browser untuk memaksa respons dari server dimuat. Judul browser dibuat dengan ViewData["Title"]
yang kita tentukan dalam Index.cshtml
templat tampilan dan tambahan "- Aplikasi Film" yang ditambahkan dalam file tata letak.
Konten dalam templat tampilan Index.cshtml
digabungkan dengan templat tampilan Views/Shared/_Layout.cshtml
. Satu respons HTML dikirim ke browser. Templat tata letak memudahkan untuk membuat perubahan yang berlaku di semua halaman dalam aplikasi. Untuk mempelajari selengkapnya, lihat Tata Letak.
Sedikit "data", pesan "Halo dari Templat Tampilan kami!", tertulis langsung di dalam kode. Aplikasi MVC memiliki "V" (tampilan), "C" (pengontrol), tetapi belum ada "M" (model).
Meneruskan Data dari Pengontrol ke Tampilan
Tindakan pengontrol dipanggil sebagai respons terhadap permintaan URL masuk. Kelas pengontrol adalah tempat kode ditulis yang menangani permintaan browser masuk. Pengontrol mengambil data dari sumber data dan memutuskan jenis respons apa yang akan dikirim kembali ke browser. Templat tampilan dapat digunakan dari pengontrol untuk menghasilkan dan memformat respons HTML ke browser.
Pengendali bertanggung jawab untuk menyediakan data yang diperlukan agar templat tampilan dapat merender respons.
Tampilan templat tidak seharusnya:
- Melakukan logika bisnis
- Berinteraksi dengan database secara langsung.
Templat tampilan harus hanya berfungsi dengan data yang disediakan oleh pengontrol. Mempertahankan "pemisahan tanggung jawab" ini membantu menjaga kode:
- Bersih.
- Bisa diuji.
- ** Dapat Dipelihara.
Saat ini, metode Welcome
di kelas HelloWorldController
memproses parameter name
dan ID
, kemudian menampilkan nilainya langsung ke browser.
Daripada meminta pengontrol merender respons ini sebagai string, ubah pengontrol untuk menggunakan templat tampilan sebagai gantinya. Templat tampilan menghasilkan respons dinamis, yang berarti bahwa data yang sesuai harus diteruskan dari pengontrol ke tampilan untuk menghasilkan respons. Lakukan ini dengan meminta pengontrol menempatkan data dinamis (parameter) yang dibutuhkan templat tampilan dalam ViewData
kamus. Templat tampilan kemudian dapat mengakses data dinamis.
Di HelloWorldController.cs
, ubah metode Welcome
untuk menambahkan nilai Message
dan NumTimes
ke kamus ViewData
.
ViewData
Kamus adalah objek dinamis, yang berarti jenis apa pun dapat digunakan. Objek ViewData
tidak memiliki properti yang ditentukan sampai sesuatu ditambahkan. Sistem pengikatan model MVC secara otomatis memetakan parameter name
bernama dan numTimes
dari string kueri ke parameter dalam metode . Lengkapnya HelloWorldController
:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
Objek ViewData
kamus berisi data yang akan diteruskan ke tampilan.
Buat templat tampilan Selamat Datang bernama Views/HelloWorld/Welcome.cshtml
.
Anda akan membuat perulangan dalam Welcome.cshtml
templat tampilan yang menampilkan "Halo" NumTimes
. Ganti konten Views/HelloWorld/Welcome.cshtml
dengan yang berikut ini:
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]!; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Simpan perubahan Anda dan telusuri ke URL berikut:
https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
Data diambil dari URL dan diteruskan ke pengontrol menggunakan pengikat model MVC. Pengontrol mengemas data ke dalam ViewData
kamus dan meneruskan objek tersebut ke tampilan. Tampilan kemudian merender data sebagai HTML ke browser.
Dalam sampel sebelumnya, ViewData
kamus digunakan untuk meneruskan data dari pengontrol ke tampilan. Kemudian dalam tutorial, model tampilan digunakan untuk meneruskan data dari pengontrol ke tampilan. Pendekatan model tampilan untuk meneruskan data lebih disukai dibandingkan pendekatan kamus ViewData
.
Dalam tutorial berikutnya, database film dibuat.
Di bagian ini, Anda mengubah kelas HelloWorldController
untuk menggunakan berkas tampilan Razor. Ini secara rapi merangkum proses menghasilkan respons HTML kepada klien.
Templat tampilan dibuat menggunakan Razor. RazorTemplat tampilan berbasis-:
- Memiliki ekstensi berkas
.cshtml
. - Berikan cara elegan untuk membuat output HTML dengan C#.
Saat ini metode Index
mengembalikan string dengan pesan dalam kelas controller. Di kelas HelloWorldController
, ganti metode Index
dengan kode berikut:
public IActionResult Index()
{
return View();
}
Kode sebelumnya:
- Memanggil metode pengontrol View .
- Menggunakan templat tampilan untuk menghasilkan respons HTML.
Metode pengontrol:
- Disebut metode tindakan. Misalnya, metode aksi
Index
dalam kode sebelumnya. - Umumnya mengembalikan IActionResult atau kelas yang berasal dari ActionResult, bukan tipe seperti
string
.
Tambah tampilan
Klik kanan pada folder Tampilan , lalu Tambahkan > Folder Baru dan beri nama folder HelloWorld.
Klik kanan pada folder Views/HelloWorld , lalu Tambahkan > Item Baru.
Dalam dialog Tambahkan Item Baru pilih Perlihatkan Semua Templat.
Dalam dialog Tambahkan Item Baru - MvcMovie:
- Dalam kotak pencarian di kanan atas, masukkan tampilan
- Pilih Razor Tampilan - Kosong
- Pertahankan nilai kotak Nama,
Index.cshtml
. - Pilih Tambahkan
Ganti konten Views/HelloWorld/Index.cshtml
Razor file tampilan dengan yang berikut ini:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Navigasikan ke https://localhost:{PORT}/HelloWorld
:
Metode
Index
dalamHelloWorldController
menjalankan pernyataanreturn View();
, yang menentukan bahwa metode harus menggunakan file templat tampilan untuk merender respons ke browser.Nama file templat tampilan tidak ditentukan, sehingga MVC default menggunakan file tampilan default. Saat nama file tampilan tidak ditentukan, tampilan default dikembalikan. Tampilan default memiliki nama yang sama dengan metode tindakan,
Index
dalam contoh ini. Templat/Views/HelloWorld/Index.cshtml
tampilan digunakan.Gambar berikut menunjukkan string "Halo dari Templat Tampilan kami!" yang dikodekan secara permanen dalam tampilan:
Mengubah tampilan dan halaman tata letak
Pilih tautan menu MvcMovie, Home, dan Privacy. Setiap halaman memperlihatkan tata letak menu yang sama. Tata letak menu diimplementasikan dalam Views/Shared/_Layout.cshtml
file.
Buka file Views/Shared/_Layout.cshtml
.
Templat tata letak memungkinkan:
- Menentukan tata letak kontainer HTML situs di satu tempat.
- Menerapkan tata letak kontainer HTML di beberapa halaman di situs.
Temukan garisnya @RenderBody()
.
RenderBody
adalah tempat penampung tempat semua halaman khusus tampilan yang Anda buat muncul, dibungkus di halaman tata letak. Misalnya, jika Anda memilih Privacy tautan, Views/Home/Privacy.cshtml
tampilan dirender di RenderBody
dalam metode .
Ubah judul, footer, dan tautan menu dalam file tata letak
Ganti konten Views/Shared/_Layout.cshtml
file dengan markup berikut. Perubahan disorot:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movie App</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">Movie App</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2023 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Markup sebelumnya membuat perubahan berikut:
- Tiga kemunculan dari
MvcMovie
keMovie App
. - Elemen jangkar
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
ke<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
.
Dalam markup sebelumnya, asp-area=""
atribut Tag Helper jangkar dan nilai atribut dihilangkan karena aplikasi ini tidak menggunakan Area.
Catatan: Movies
Pengontrol belum diimplementasikan. Pada titik ini, Movie App
tautan tidak berfungsi.
Simpan perubahan dan pilih Privacy tautan. Perhatikan bagaimana judul pada tab browser menampilkan Privacy Kebijakan - Aplikasi Film alih-alih Privacy Kebijakan - MvcMovie
Pilih tautan Home.
Perhatikan bahwa judul dan teks jangkar menampilkan Aplikasi Film. Perubahan dilakukan sekali di templat tata letak dan semua halaman di situs mencerminkan teks tautan baru dan judul baru.
Periksa file Views/_ViewStart.cshtml
.
@{
Layout = "_Layout";
}
File Views/_ViewStart.cshtml
memasukkan file Views/Shared/_Layout.cshtml
ke dalam setiap tampilan. Properti Layout
dapat digunakan untuk mengatur tampilan tata letak yang berbeda, atau mengaturnya ke null
sehingga tidak ada file tata letak yang akan digunakan.
Buka file tampilan Views/HelloWorld/Index.cshtml
.
Ubah judul dan elemen <h2>
seperti yang disorot di bawah ini.
@{
ViewData["Title"] = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Judul dan <h2>
elemen sedikit berbeda sehingga jelas bagian kode mana yang mengubah tampilan.
ViewData["Title"] = "Movie List";
dalam kode di atas mengatur properti Title
kamus ViewData
ke "Daftar Film". Properti Title
digunakan dalam <title>
elemen HTML di halaman tata letak:
<title>@ViewData["Title"] - Movie App</title>
Simpan perubahan dan navigasikan ke https://localhost:{PORT}/HelloWorld
.
Perhatikan bahwa berikut ini telah berubah:
- Judul jendela browser.
- Judul utama.
- Judul sekunder.
Jika tidak ada perubahan di browser, itu bisa menjadi konten cache yang sedang dilihat. Tekan Ctrl+F5 di browser untuk memaksa respons dari server dimuat. Judul browser dibuat dengan ViewData["Title"]
yang kita tentukan dalam Index.cshtml
templat tampilan dan tambahan "- Aplikasi Film" yang ditambahkan dalam file tata letak.
Konten dalam templat tampilan Index.cshtml
digabungkan dengan templat tampilan Views/Shared/_Layout.cshtml
. Satu respons HTML dikirim ke browser. Templat tata letak memudahkan untuk membuat perubahan yang berlaku di semua halaman dalam aplikasi. Untuk mempelajari selengkapnya, lihat Tata Letak.
Sedikit "data", pesan "Halo dari Templat Tampilan kami!", tertulis langsung di dalam kode. Aplikasi MVC memiliki "V" (tampilan), "C" (pengontrol), tetapi belum ada "M" (model).
Meneruskan Data dari Pengontrol ke Tampilan
Tindakan pengontrol dipanggil sebagai respons terhadap permintaan URL masuk. Kelas pengontrol adalah tempat kode ditulis yang menangani permintaan browser masuk. Pengontrol mengambil data dari sumber data dan memutuskan jenis respons apa yang akan dikirim kembali ke browser. Templat tampilan dapat digunakan dari pengontrol untuk menghasilkan dan memformat respons HTML ke browser.
Pengendali bertanggung jawab untuk menyediakan data yang diperlukan agar templat tampilan dapat merender respons.
Tampilan templat tidak seharusnya:
- Melakukan logika bisnis
- Berinteraksi dengan database secara langsung.
Templat tampilan harus hanya berfungsi dengan data yang disediakan oleh pengontrol. Mempertahankan "pemisahan tanggung jawab" ini membantu menjaga kode:
- Bersih.
- Bisa diuji.
- ** Dapat Dipelihara.
Saat ini, metode Welcome
di kelas HelloWorldController
memproses parameter name
dan ID
, kemudian menampilkan nilainya langsung ke browser.
Daripada meminta pengontrol merender respons ini sebagai string, ubah pengontrol untuk menggunakan templat tampilan sebagai gantinya. Templat tampilan menghasilkan respons dinamis, yang berarti bahwa data yang sesuai harus diteruskan dari pengontrol ke tampilan untuk menghasilkan respons. Lakukan ini dengan meminta pengontrol menempatkan data dinamis (parameter) yang dibutuhkan templat tampilan dalam ViewData
kamus. Templat tampilan kemudian dapat mengakses data dinamis.
Di HelloWorldController.cs
, ubah metode Welcome
untuk menambahkan nilai Message
dan NumTimes
ke kamus ViewData
.
ViewData
Kamus adalah objek dinamis, yang berarti jenis apa pun dapat digunakan. Objek ViewData
tidak memiliki properti yang ditentukan sampai sesuatu ditambahkan. Sistem pengikatan model MVC secara otomatis memetakan parameter name
bernama dan numTimes
dari string kueri ke parameter dalam metode . Lengkapnya HelloWorldController
:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
Objek ViewData
kamus berisi data yang akan diteruskan ke tampilan.
Buat templat tampilan Selamat Datang bernama Views/HelloWorld/Welcome.cshtml
.
Anda akan membuat perulangan dalam Welcome.cshtml
templat tampilan yang menampilkan "Halo" NumTimes
. Ganti konten Views/HelloWorld/Welcome.cshtml
dengan yang berikut ini:
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]!; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Simpan perubahan Anda dan telusuri ke URL berikut:
https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
Data diambil dari URL dan diteruskan ke pengontrol menggunakan pengikat model MVC. Pengontrol mengemas data ke dalam ViewData
kamus dan meneruskan objek tersebut ke tampilan. Tampilan kemudian merender data sebagai HTML ke browser.
Dalam sampel sebelumnya, ViewData
kamus digunakan untuk meneruskan data dari pengontrol ke tampilan. Kemudian dalam tutorial, model tampilan digunakan untuk meneruskan data dari pengontrol ke tampilan. Pendekatan model tampilan untuk meneruskan data lebih disukai dibandingkan pendekatan kamus ViewData
.
Dalam tutorial berikutnya, database film dibuat.
Di bagian ini, Anda mengubah kelas HelloWorldController
untuk menggunakan berkas tampilan Razor. Ini secara rapi merangkum proses menghasilkan respons HTML kepada klien.
Templat tampilan dibuat menggunakan Razor. RazorTemplat tampilan berbasis-:
- Memiliki ekstensi berkas
.cshtml
. - Berikan cara elegan untuk membuat output HTML dengan C#.
Saat ini metode Index
mengembalikan string dengan pesan dalam kelas controller. Di kelas HelloWorldController
, ganti metode Index
dengan kode berikut:
public IActionResult Index()
{
return View();
}
Kode sebelumnya:
- Memanggil metode pengontrol View .
- Menggunakan templat tampilan untuk menghasilkan respons HTML.
Metode pengontrol:
- Disebut metode tindakan. Misalnya, metode aksi
Index
dalam kode sebelumnya. - Umumnya mengembalikan IActionResult atau kelas yang berasal dari ActionResult, bukan tipe seperti
string
.
Tambah tampilan
Klik kanan pada folder Tampilan , lalu Tambahkan > Folder Baru dan beri nama folder HelloWorld.
Klik kanan pada folder Views/HelloWorld , lalu Tambahkan > Item Baru.
Dalam dialog Tambahkan Item Baru - MvcMovie:
- Dalam kotak pencarian di kanan atas, masukkan tampilan
- Pilih Razor Tampilan - Kosong
- Pertahankan nilai kotak Nama,
Index.cshtml
. - Pilih Tambahkan
Ganti konten Views/HelloWorld/Index.cshtml
Razor file tampilan dengan yang berikut ini:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Navigasikan ke https://localhost:{PORT}/HelloWorld
:
Metode
Index
dalamHelloWorldController
menjalankan pernyataanreturn View();
, yang menentukan bahwa metode harus menggunakan file templat tampilan untuk merender respons ke browser.Nama file templat tampilan tidak ditentukan, sehingga MVC default menggunakan file tampilan default. Saat nama file tampilan tidak ditentukan, tampilan default dikembalikan. Tampilan default memiliki nama yang sama dengan metode tindakan,
Index
dalam contoh ini. Templat/Views/HelloWorld/Index.cshtml
tampilan digunakan.Gambar berikut menunjukkan string "Halo dari Templat Tampilan kami!" yang dikodekan secara permanen dalam tampilan:
Mengubah tampilan dan halaman tata letak
Pilih tautan menu MvcMovie, Home, dan Privacy. Setiap halaman memperlihatkan tata letak menu yang sama. Tata letak menu diimplementasikan dalam Views/Shared/_Layout.cshtml
file.
Buka file Views/Shared/_Layout.cshtml
.
Templat tata letak memungkinkan:
- Menentukan tata letak kontainer HTML situs di satu tempat.
- Menerapkan tata letak kontainer HTML di beberapa halaman di situs.
Temukan garisnya @RenderBody()
.
RenderBody
adalah tempat penampung tempat semua halaman khusus tampilan yang Anda buat muncul, dibungkus di halaman tata letak. Misalnya, jika Anda memilih Privacy tautan, Views/Home/Privacy.cshtml
tampilan dirender di RenderBody
dalam metode .
Ubah judul, footer, dan tautan menu dalam file tata letak
Ganti konten Views/Shared/_Layout.cshtml
file dengan markup berikut. Perubahan disorot:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movie App</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">Movie App</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2022 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Markup sebelumnya membuat perubahan berikut:
- Tiga kemunculan dari
MvcMovie
keMovie App
. - Elemen jangkar
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
ke<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
.
Dalam markup sebelumnya, asp-area=""
atribut Tag Helper jangkar dan nilai atribut dihilangkan karena aplikasi ini tidak menggunakan Area.
Catatan: Movies
Pengontrol belum diimplementasikan. Pada titik ini, Movie App
tautan tidak berfungsi.
Simpan perubahan dan pilih Privacy tautan. Perhatikan bagaimana judul pada tab browser menampilkan Privacy Kebijakan - Aplikasi Film alih-alih Privacy Kebijakan - MvcMovie
Pilih tautan Home.
Perhatikan bahwa judul dan teks jangkar menampilkan Aplikasi Film. Perubahan dilakukan sekali di templat tata letak dan semua halaman di situs mencerminkan teks tautan baru dan judul baru.
Periksa file Views/_ViewStart.cshtml
.
@{
Layout = "_Layout";
}
File Views/_ViewStart.cshtml
memasukkan file Views/Shared/_Layout.cshtml
ke dalam setiap tampilan. Properti Layout
dapat digunakan untuk mengatur tampilan tata letak yang berbeda, atau mengaturnya ke null
sehingga tidak ada file tata letak yang akan digunakan.
Buka file tampilan Views/HelloWorld/Index.cshtml
.
Ubah judul dan elemen <h2>
seperti yang disorot di bawah ini.
@{
ViewData["Title"] = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Judul dan <h2>
elemen sedikit berbeda sehingga jelas bagian kode mana yang mengubah tampilan.
ViewData["Title"] = "Movie List";
dalam kode di atas mengatur properti Title
kamus ViewData
ke "Daftar Film". Properti Title
digunakan dalam <title>
elemen HTML di halaman tata letak:
<title>@ViewData["Title"] - Movie App</title>
Simpan perubahan dan navigasikan ke https://localhost:{PORT}/HelloWorld
.
Perhatikan bahwa berikut ini telah berubah:
- Judul jendela browser.
- Judul utama.
- Judul sekunder.
Jika tidak ada perubahan di browser, itu bisa menjadi konten cache yang sedang dilihat. Tekan Ctrl+F5 di browser untuk memaksa respons dari server dimuat. Judul browser dibuat dengan ViewData["Title"]
yang kita tentukan dalam Index.cshtml
templat tampilan dan tambahan "- Aplikasi Film" yang ditambahkan dalam file tata letak.
Konten dalam templat tampilan Index.cshtml
digabungkan dengan templat tampilan Views/Shared/_Layout.cshtml
. Satu respons HTML dikirim ke browser. Templat tata letak memudahkan untuk membuat perubahan yang berlaku di semua halaman dalam aplikasi. Untuk mempelajari selengkapnya, lihat Tata Letak.
Sedikit "data", pesan "Halo dari Templat Tampilan kami!", tertulis langsung di dalam kode. Aplikasi MVC memiliki "V" (tampilan), "C" (pengontrol), tetapi belum ada "M" (model).
Meneruskan Data dari Pengontrol ke Tampilan
Tindakan pengontrol dipanggil sebagai respons terhadap permintaan URL masuk. Kelas pengontrol adalah tempat kode ditulis yang menangani permintaan browser masuk. Pengontrol mengambil data dari sumber data dan memutuskan jenis respons apa yang akan dikirim kembali ke browser. Templat tampilan dapat digunakan dari pengontrol untuk menghasilkan dan memformat respons HTML ke browser.
Pengendali bertanggung jawab untuk menyediakan data yang diperlukan agar templat tampilan dapat merender respons.
Tampilan templat tidak seharusnya:
- Melakukan logika bisnis
- Berinteraksi dengan database secara langsung.
Templat tampilan harus hanya berfungsi dengan data yang disediakan oleh pengontrol. Mempertahankan "pemisahan tanggung jawab" ini membantu menjaga kode:
- Bersih.
- Bisa diuji.
- ** Dapat Dipelihara.
Saat ini, metode Welcome
di kelas HelloWorldController
memproses parameter name
dan ID
, kemudian menampilkan nilainya langsung ke browser.
Daripada meminta pengontrol merender respons ini sebagai string, ubah pengontrol untuk menggunakan templat tampilan sebagai gantinya. Templat tampilan menghasilkan respons dinamis, yang berarti bahwa data yang sesuai harus diteruskan dari pengontrol ke tampilan untuk menghasilkan respons. Lakukan ini dengan meminta pengontrol menempatkan data dinamis (parameter) yang dibutuhkan templat tampilan dalam ViewData
kamus. Templat tampilan kemudian dapat mengakses data dinamis.
Di HelloWorldController.cs
, ubah metode Welcome
untuk menambahkan nilai Message
dan NumTimes
ke kamus ViewData
.
ViewData
Kamus adalah objek dinamis, yang berarti jenis apa pun dapat digunakan. Objek ViewData
tidak memiliki properti yang ditentukan sampai sesuatu ditambahkan. Sistem pengikatan model MVC secara otomatis memetakan parameter name
bernama dan numTimes
dari string kueri ke parameter dalam metode . Lengkapnya HelloWorldController
:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers;
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
Objek ViewData
kamus berisi data yang akan diteruskan ke tampilan.
Buat templat tampilan Selamat Datang bernama Views/HelloWorld/Welcome.cshtml
.
Anda akan membuat perulangan dalam Welcome.cshtml
templat tampilan yang menampilkan "Halo" NumTimes
. Ganti konten Views/HelloWorld/Welcome.cshtml
dengan yang berikut ini:
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]!; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Simpan perubahan Anda dan telusuri ke URL berikut:
https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
Data diambil dari URL dan diteruskan ke pengontrol menggunakan pengikat model MVC. Pengontrol mengemas data ke dalam ViewData
kamus dan meneruskan objek tersebut ke tampilan. Tampilan kemudian merender data sebagai HTML ke browser.
Dalam sampel sebelumnya, ViewData
kamus digunakan untuk meneruskan data dari pengontrol ke tampilan. Kemudian dalam tutorial, model tampilan digunakan untuk meneruskan data dari pengontrol ke tampilan. Pendekatan model tampilan untuk meneruskan data lebih disukai dibandingkan pendekatan kamus ViewData
.
Dalam tutorial berikutnya, database film dibuat.
Di bagian ini, Anda mengubah kelas HelloWorldController
untuk menggunakan berkas tampilan Razor. Ini secara rapi merangkum proses menghasilkan respons HTML kepada klien.
Templat tampilan dibuat menggunakan Razor. RazorTemplat tampilan berbasis-:
- Memiliki ekstensi berkas
.cshtml
. - Berikan cara elegan untuk membuat output HTML dengan C#.
Saat ini metode Index
mengembalikan string dengan pesan dalam kelas controller. Di kelas HelloWorldController
, ganti metode Index
dengan kode berikut:
public IActionResult Index()
{
return View();
}
Kode sebelumnya:
- Memanggil metode pengontrol View .
- Menggunakan templat tampilan untuk menghasilkan respons HTML.
Metode pengontrol:
- Disebut metode tindakan. Misalnya, metode aksi
Index
dalam kode sebelumnya. - Umumnya mengembalikan IActionResult atau kelas yang berasal dari ActionResult, bukan tipe seperti
string
.
Tambah tampilan
Klik kanan pada folder Tampilan , lalu Tambahkan > Folder Baru dan beri nama folder HelloWorld.
Klik kanan pada folder Views/HelloWorld , lalu Tambahkan > Item Baru.
Dalam dialog Tambahkan Item Baru - MvcMovie:
- Dalam kotak pencarian di kanan atas, masukkan tampilan
- Pilih Razor Tampilan - Kosong
- Pertahankan nilai kotak Nama,
Index.cshtml
. - Pilih Tambahkan
Ganti konten Views/HelloWorld/Index.cshtml
Razor file tampilan dengan yang berikut ini:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Navigasikan ke https://localhost:{PORT}/HelloWorld
:
Metode
Index
dalamHelloWorldController
menjalankan pernyataanreturn View();
, yang menentukan bahwa metode harus menggunakan file templat tampilan untuk merender respons ke browser.Nama file templat tampilan tidak ditentukan, sehingga MVC default menggunakan file tampilan default. Saat nama file tampilan tidak ditentukan, tampilan default dikembalikan. Tampilan default memiliki nama yang sama dengan metode tindakan,
Index
dalam contoh ini. Templat/Views/HelloWorld/Index.cshtml
tampilan digunakan.Gambar berikut menunjukkan string "Halo dari Templat Tampilan kami!" yang dikodekan secara permanen dalam tampilan:
Mengubah tampilan dan halaman tata letak
Pilih tautan menu MvcMovie, Home, dan Privacy. Setiap halaman memperlihatkan tata letak menu yang sama. Tata letak menu diimplementasikan dalam Views/Shared/_Layout.cshtml
file.
Buka file Views/Shared/_Layout.cshtml
.
Templat tata letak memungkinkan:
- Menentukan tata letak kontainer HTML situs di satu tempat.
- Menerapkan tata letak kontainer HTML di beberapa halaman di situs.
Temukan garisnya @RenderBody()
.
RenderBody
adalah tempat penampung tempat semua halaman khusus tampilan yang Anda buat muncul, dibungkus di halaman tata letak. Misalnya, jika Anda memilih Privacy tautan, Views/Home/Privacy.cshtml
tampilan dirender di RenderBody
dalam metode .
Ubah judul, footer, dan tautan menu dalam file tata letak
Ganti konten Views/Shared/_Layout.cshtml
file dengan markup berikut. Perubahan disorot:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movie App</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Movies" asp-action="Index">Movie App</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2021 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Markup sebelumnya membuat perubahan berikut:
- Tiga kemunculan dari
MvcMovie
keMovie App
. - Elemen jangkar
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
ke<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
.
Dalam markup sebelumnya, asp-area=""
atribut Tag Helper jangkar dan nilai atribut dihilangkan karena aplikasi ini tidak menggunakan Area.
Catatan: Movies
Pengontrol belum diimplementasikan. Pada titik ini, Movie App
tautan tidak berfungsi.
Simpan perubahan dan pilih Privacy tautan. Perhatikan bagaimana judul pada tab browser menampilkan Privacy Kebijakan - Aplikasi Film alih-alih Privacy Kebijakan - MvcMovie
Pilih tautan Home.
Perhatikan bahwa judul dan teks jangkar menampilkan Aplikasi Film. Perubahan dilakukan sekali di templat tata letak dan semua halaman di situs mencerminkan teks tautan baru dan judul baru.
Periksa file Views/_ViewStart.cshtml
.
@{
Layout = "_Layout";
}
File Views/_ViewStart.cshtml
memasukkan file Views/Shared/_Layout.cshtml
ke dalam setiap tampilan. Properti Layout
dapat digunakan untuk mengatur tampilan tata letak yang berbeda, atau mengaturnya ke null
sehingga tidak ada file tata letak yang akan digunakan.
Buka file tampilan Views/HelloWorld/Index.cshtml
.
Ubah judul dan elemen <h2>
seperti yang disorot di bawah ini.
@{
ViewData["Title"] = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Judul dan <h2>
elemen sedikit berbeda sehingga jelas bagian kode mana yang mengubah tampilan.
ViewData["Title"] = "Movie List";
dalam kode di atas mengatur properti Title
kamus ViewData
ke "Daftar Film". Properti Title
digunakan dalam <title>
elemen HTML di halaman tata letak:
<title>@ViewData["Title"] - Movie App</title>
Simpan perubahan dan navigasikan ke https://localhost:{PORT}/HelloWorld
.
Perhatikan bahwa berikut ini telah berubah:
- Judul jendela browser.
- Judul utama.
- Judul sekunder.
Jika tidak ada perubahan di browser, itu bisa menjadi konten cache yang sedang dilihat. Tekan Ctrl+F5 di browser untuk memaksa respons dari server dimuat. Judul browser dibuat dengan ViewData["Title"]
yang kita tentukan dalam Index.cshtml
templat tampilan dan tambahan "- Aplikasi Film" yang ditambahkan dalam file tata letak.
Konten dalam templat tampilan Index.cshtml
digabungkan dengan templat tampilan Views/Shared/_Layout.cshtml
. Satu respons HTML dikirim ke browser. Templat tata letak memudahkan untuk membuat perubahan yang berlaku di semua halaman dalam aplikasi. Untuk mempelajari selengkapnya, lihat Tata Letak.
Sedikit "data", pesan "Halo dari Templat Tampilan kami!", tertulis langsung di dalam kode. Aplikasi MVC memiliki "V" (tampilan), "C" (pengontrol), tetapi belum ada "M" (model).
Meneruskan Data dari Pengontrol ke Tampilan
Tindakan pengontrol dipanggil sebagai respons terhadap permintaan URL masuk. Kelas pengontrol adalah tempat kode ditulis yang menangani permintaan browser masuk. Pengontrol mengambil data dari sumber data dan memutuskan jenis respons apa yang akan dikirim kembali ke browser. Templat tampilan dapat digunakan dari pengontrol untuk menghasilkan dan memformat respons HTML ke browser.
Pengendali bertanggung jawab untuk menyediakan data yang diperlukan agar templat tampilan dapat merender respons.
Tampilan templat tidak seharusnya:
- Melakukan logika bisnis
- Berinteraksi dengan database secara langsung.
Templat tampilan harus hanya berfungsi dengan data yang disediakan oleh pengontrol. Mempertahankan "pemisahan tanggung jawab" ini membantu menjaga kode:
- Bersih.
- Bisa diuji.
- ** Dapat Dipelihara.
Saat ini, metode Welcome
di kelas HelloWorldController
memproses parameter name
dan ID
, kemudian menampilkan nilainya langsung ke browser.
Daripada meminta pengontrol merender respons ini sebagai string, ubah pengontrol untuk menggunakan templat tampilan sebagai gantinya. Templat tampilan menghasilkan respons dinamis, yang berarti bahwa data yang sesuai harus diteruskan dari pengontrol ke tampilan untuk menghasilkan respons. Lakukan ini dengan meminta pengontrol menempatkan data dinamis (parameter) yang dibutuhkan templat tampilan dalam ViewData
kamus. Templat tampilan kemudian dapat mengakses data dinamis.
Di HelloWorldController.cs
, ubah metode Welcome
untuk menambahkan nilai Message
dan NumTimes
ke kamus ViewData
.
ViewData
Kamus adalah objek dinamis, yang berarti jenis apa pun dapat digunakan. Objek ViewData
tidak memiliki properti yang ditentukan sampai sesuatu ditambahkan. Sistem pengikatan model MVC secara otomatis memetakan parameter name
bernama dan numTimes
dari string kueri ke parameter dalam metode . Lengkapnya HelloWorldController
:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
}
Objek ViewData
kamus berisi data yang akan diteruskan ke tampilan.
Buat templat tampilan Selamat Datang bernama Views/HelloWorld/Welcome.cshtml
.
Anda akan membuat perulangan dalam Welcome.cshtml
templat tampilan yang menampilkan "Halo" NumTimes
. Ganti konten Views/HelloWorld/Welcome.cshtml
dengan yang berikut ini:
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]!; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Simpan perubahan Anda dan telusuri ke URL berikut:
https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
Data diambil dari URL dan diteruskan ke pengontrol menggunakan pengikat model MVC. Pengontrol mengemas data ke dalam ViewData
kamus dan meneruskan objek tersebut ke tampilan. Tampilan kemudian merender data sebagai HTML ke browser.
Dalam sampel sebelumnya, ViewData
kamus digunakan untuk meneruskan data dari pengontrol ke tampilan. Kemudian dalam tutorial, model tampilan digunakan untuk meneruskan data dari pengontrol ke tampilan. Pendekatan model tampilan untuk meneruskan data lebih disukai dibandingkan pendekatan kamus ViewData
.
Dalam tutorial berikutnya, database film dibuat.
Di bagian ini, Anda mengubah kelas HelloWorldController
untuk menggunakan berkas tampilan Razor. Ini secara rapi merangkum proses menghasilkan respons HTML kepada klien.
Templat tampilan dibuat menggunakan Razor. RazorTemplat tampilan berbasis-:
- Memiliki ekstensi berkas
.cshtml
. - Berikan cara elegan untuk membuat output HTML dengan C#.
Saat ini metode Index
mengembalikan string dengan pesan dalam kelas controller. Di kelas HelloWorldController
, ganti metode Index
dengan kode berikut:
public IActionResult Index()
{
return View();
}
Kode sebelumnya:
- Memanggil metode pengontrol View .
- Menggunakan templat tampilan untuk menghasilkan respons HTML.
Metode pengontrol:
- Disebut metode tindakan. Misalnya, metode aksi
Index
dalam kode sebelumnya. - Umumnya mengembalikan IActionResult atau kelas yang berasal dari ActionResult, bukan tipe seperti
string
.
Tambah tampilan
Klik kanan pada folder Tampilan , lalu Tambahkan > Folder Baru dan beri nama folder HelloWorld.
Klik kanan pada folder Views/HelloWorld , lalu Tambahkan > Item Baru.
Dalam dialog Tambahkan Item Baru - MvcMovie:
- Dalam kotak pencarian di kanan atas, masukkan tampilan
- Pilih Razor Tampilan - Kosong
- Pertahankan nilai kotak Nama,
Index.cshtml
. - Pilih Tambahkan
Ganti konten Views/HelloWorld/Index.cshtml
Razor file tampilan dengan yang berikut ini:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Navigasikan ke https://localhost:{PORT}/HelloWorld
:
Metode
Index
dalamHelloWorldController
menjalankan pernyataanreturn View();
, yang menentukan bahwa metode harus menggunakan file templat tampilan untuk merender respons ke browser.Nama file templat tampilan tidak ditentukan, sehingga MVC default menggunakan file tampilan default. Saat nama file tampilan tidak ditentukan, tampilan default dikembalikan. Tampilan default memiliki nama yang sama dengan metode tindakan,
Index
dalam contoh ini. Templat/Views/HelloWorld/Index.cshtml
tampilan digunakan.Gambar berikut menunjukkan string "Halo dari Templat Tampilan kami!" yang dikodekan secara permanen dalam tampilan:
Mengubah tampilan dan halaman tata letak
Pilih tautan menu MvcMovie, Home, dan Privacy. Setiap halaman memperlihatkan tata letak menu yang sama. Tata letak menu diimplementasikan dalam Views/Shared/_Layout.cshtml
file.
Buka file Views/Shared/_Layout.cshtml
.
Templat tata letak memungkinkan:
- Menentukan tata letak kontainer HTML situs di satu tempat.
- Menerapkan tata letak kontainer HTML di beberapa halaman di situs.
Temukan garisnya @RenderBody()
.
RenderBody
adalah tempat penampung tempat semua halaman khusus tampilan yang Anda buat muncul, dibungkus di halaman tata letak. Misalnya, jika Anda memilih Privacy tautan, Views/Home/Privacy.cshtml
tampilan dirender di RenderBody
dalam metode .
Ubah judul, footer, dan tautan menu dalam file tata letak
Ganti konten Views/Shared/_Layout.cshtml
file dengan markup berikut. Perubahan disorot:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movie App</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2020 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Markup sebelumnya membuat perubahan berikut:
- Tiga kemunculan dari
MvcMovie
keMovie App
. - Elemen jangkar
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
ke<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
.
Dalam markup sebelumnya, asp-area=""
atribut Tag Helper jangkar dan nilai atribut dihilangkan karena aplikasi ini tidak menggunakan Area.
Catatan: Movies
Pengontrol belum diimplementasikan. Pada titik ini, Movie App
tautan tidak berfungsi.
Simpan perubahan dan pilih Privacy tautan. Perhatikan bagaimana judul pada tab browser menampilkan Privacy Kebijakan - Aplikasi Film alih-alih Privacy Kebijakan - MvcMovie
Pilih tautan Home.
Perhatikan bahwa judul dan teks jangkar menampilkan Aplikasi Film. Perubahan dilakukan sekali di templat tata letak dan semua halaman di situs mencerminkan teks tautan baru dan judul baru.
Periksa file Views/_ViewStart.cshtml
.
@{
Layout = "_Layout";
}
File Views/_ViewStart.cshtml
memasukkan file Views/Shared/_Layout.cshtml
ke dalam setiap tampilan. Properti Layout
dapat digunakan untuk mengatur tampilan tata letak yang berbeda, atau mengaturnya ke null
sehingga tidak ada file tata letak yang akan digunakan.
Buka file tampilan Views/HelloWorld/Index.cshtml
.
Ubah judul dan elemen <h2>
seperti yang disorot di bawah ini.
@{
ViewData["Title"] = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Judul dan <h2>
elemen sedikit berbeda sehingga jelas bagian kode mana yang mengubah tampilan.
ViewData["Title"] = "Movie List";
dalam kode di atas mengatur properti Title
kamus ViewData
ke "Daftar Film". Properti Title
digunakan dalam <title>
elemen HTML di halaman tata letak:
<title>@ViewData["Title"] - Movie App</title>
Simpan perubahan dan navigasikan ke https://localhost:{PORT}/HelloWorld
.
Perhatikan bahwa berikut ini telah berubah:
- Judul jendela browser.
- Judul utama.
- Judul sekunder.
Jika tidak ada perubahan di browser, itu bisa menjadi konten cache yang sedang dilihat. Tekan Ctrl+F5 di browser untuk memaksa respons dari server dimuat. Judul browser dibuat dengan ViewData["Title"]
yang kita tentukan dalam Index.cshtml
templat tampilan dan tambahan "- Aplikasi Film" yang ditambahkan dalam file tata letak.
Konten dalam templat tampilan Index.cshtml
digabungkan dengan templat tampilan Views/Shared/_Layout.cshtml
. Satu respons HTML dikirim ke browser. Templat tata letak memudahkan untuk membuat perubahan yang berlaku di semua halaman dalam aplikasi. Untuk mempelajari selengkapnya, lihat Tata Letak.
Sedikit "data", pesan "Halo dari Templat Tampilan kami!", tertulis langsung di dalam kode. Aplikasi MVC memiliki "V" (tampilan), "C" (pengontrol), tetapi belum ada "M" (model).
Meneruskan Data dari Pengontrol ke Tampilan
Tindakan pengontrol dipanggil sebagai respons terhadap permintaan URL masuk. Kelas pengontrol adalah tempat kode ditulis yang menangani permintaan browser masuk. Pengontrol mengambil data dari sumber data dan memutuskan jenis respons apa yang akan dikirim kembali ke browser. Templat tampilan dapat digunakan dari pengontrol untuk menghasilkan dan memformat respons HTML ke browser.
Pengendali bertanggung jawab untuk menyediakan data yang diperlukan agar templat tampilan dapat merender respons.
Tampilan templat tidak seharusnya:
- Melakukan logika bisnis
- Berinteraksi dengan database secara langsung.
Templat tampilan harus hanya berfungsi dengan data yang disediakan oleh pengontrol. Mempertahankan "pemisahan tanggung jawab" ini membantu menjaga kode:
- Bersih.
- Bisa diuji.
- ** Dapat Dipelihara.
Saat ini, metode Welcome
di kelas HelloWorldController
memproses parameter name
dan ID
, kemudian menampilkan nilainya langsung ke browser.
Daripada meminta pengontrol merender respons ini sebagai string, ubah pengontrol untuk menggunakan templat tampilan sebagai gantinya. Templat tampilan menghasilkan respons dinamis, yang berarti bahwa data yang sesuai harus diteruskan dari pengontrol ke tampilan untuk menghasilkan respons. Lakukan ini dengan meminta pengontrol menempatkan data dinamis (parameter) yang dibutuhkan templat tampilan dalam ViewData
kamus. Templat tampilan kemudian dapat mengakses data dinamis.
Di HelloWorldController.cs
, ubah metode Welcome
untuk menambahkan nilai Message
dan NumTimes
ke kamus ViewData
.
ViewData
Kamus adalah objek dinamis, yang berarti jenis apa pun dapat digunakan. Objek ViewData
tidak memiliki properti yang ditentukan sampai sesuatu ditambahkan. Sistem pengikatan model MVC secara otomatis memetakan parameter name
bernama dan numTimes
dari string kueri ke parameter dalam metode . Lengkapnya HelloWorldController
:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
}
Objek ViewData
kamus berisi data yang akan diteruskan ke tampilan.
Buat templat tampilan Selamat Datang bernama Views/HelloWorld/Welcome.cshtml
.
Anda akan membuat perulangan dalam Welcome.cshtml
templat tampilan yang menampilkan "Halo" NumTimes
. Ganti konten Views/HelloWorld/Welcome.cshtml
dengan yang berikut ini:
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Simpan perubahan Anda dan telusuri ke URL berikut:
https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
Data diambil dari URL dan diteruskan ke pengontrol menggunakan pengikat model MVC. Pengontrol mengemas data ke dalam ViewData
kamus dan meneruskan objek tersebut ke tampilan. Tampilan kemudian merender data sebagai HTML ke browser.
Dalam sampel sebelumnya, ViewData
kamus digunakan untuk meneruskan data dari pengontrol ke tampilan. Kemudian dalam tutorial, model tampilan digunakan untuk meneruskan data dari pengontrol ke tampilan. Pendekatan model tampilan untuk meneruskan data lebih disukai dibandingkan pendekatan kamus ViewData
.
Dalam tutorial berikutnya, database film dibuat.
Di bagian ini, Anda mengubah kelas HelloWorldController
untuk menggunakan berkas tampilan Razor. Ini secara rapi merangkum proses menghasilkan respons HTML kepada klien.
Templat tampilan dibuat menggunakan Razor. RazorTemplat tampilan berbasis-:
- Memiliki ekstensi berkas
.cshtml
. - Berikan cara elegan untuk membuat output HTML dengan C#.
Saat ini metode Index
mengembalikan string dengan pesan dalam kelas controller. Di kelas HelloWorldController
, ganti metode Index
dengan kode berikut:
public IActionResult Index()
{
return View();
}
Kode sebelumnya:
- Memanggil metode pengontrol View .
- Menggunakan templat tampilan untuk menghasilkan respons HTML.
Metode pengontrol:
- Disebut metode tindakan. Misalnya, metode aksi
Index
dalam kode sebelumnya. - Umumnya mengembalikan IActionResult atau kelas yang berasal dari ActionResult, bukan tipe seperti
string
.
Tambah tampilan
Klik kanan pada folder Tampilan , lalu Tambahkan > Folder Baru dan beri nama folder HelloWorld.
Klik kanan pada folder Views/HelloWorld , lalu Tambahkan > Item Baru.
Dalam dialog Tambahkan Item Baru - MvcMovie:
- Dalam kotak pencarian di kanan atas, masukkan tampilan
- Pilih Razor Tampilan - Kosong
- Pertahankan nilai kotak Nama,
Index.cshtml
. - Pilih Tambahkan
Ganti konten Views/HelloWorld/Index.cshtml
Razor file tampilan dengan yang berikut ini:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Navigasikan ke https://localhost:{PORT}/HelloWorld
:
Metode
Index
dalamHelloWorldController
menjalankan pernyataanreturn View();
, yang menentukan bahwa metode harus menggunakan file templat tampilan untuk merender respons ke browser.Nama file templat tampilan tidak ditentukan, sehingga MVC default menggunakan file tampilan default. Saat nama file tampilan tidak ditentukan, tampilan default dikembalikan. Tampilan default memiliki nama yang sama dengan metode tindakan,
Index
dalam contoh ini. Templat/Views/HelloWorld/Index.cshtml
tampilan digunakan.Gambar berikut menunjukkan string "Halo dari Templat Tampilan kami!" yang dikodekan secara permanen dalam tampilan:
Mengubah tampilan dan halaman tata letak
Pilih tautan menu MvcMovie, Home, dan Privacy. Setiap halaman memperlihatkan tata letak menu yang sama. Tata letak menu diimplementasikan dalam Views/Shared/_Layout.cshtml
file.
Buka file Views/Shared/_Layout.cshtml
.
Templat tata letak memungkinkan:
- Menentukan tata letak kontainer HTML situs di satu tempat.
- Menerapkan tata letak kontainer HTML di beberapa halaman di situs.
Temukan garisnya @RenderBody()
.
RenderBody
adalah tempat penampung tempat semua halaman khusus tampilan yang Anda buat muncul, dibungkus di halaman tata letak. Misalnya, jika Anda memilih Privacy tautan, Views/Home/Privacy.cshtml
tampilan dirender di RenderBody
dalam metode .
Ubah judul, footer, dan tautan menu dalam file tata letak
Ganti konten Views/Shared/_Layout.cshtml
file dengan markup berikut. Perubahan disorot:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Movie App</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2020 - Movie App - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>
Markup sebelumnya membuat perubahan berikut:
- Tiga kemunculan dari
MvcMovie
keMovie App
. - Elemen jangkar
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
ke<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
.
Dalam markup sebelumnya, asp-area=""
atribut Tag Helper jangkar dan nilai atribut dihilangkan karena aplikasi ini tidak menggunakan Area.
Catatan: Movies
Pengontrol belum diimplementasikan. Pada titik ini, Movie App
tautan tidak berfungsi.
Simpan perubahan dan pilih Privacy tautan. Perhatikan bagaimana judul pada tab browser menampilkan Privacy Kebijakan - Aplikasi Film alih-alih Privacy Kebijakan - MvcMovie
Pilih tautan Home.
Perhatikan bahwa judul dan teks jangkar menampilkan Aplikasi Film. Perubahan dilakukan sekali di templat tata letak dan semua halaman di situs mencerminkan teks tautan baru dan judul baru.
Periksa file Views/_ViewStart.cshtml
.
@{
Layout = "_Layout";
}
File Views/_ViewStart.cshtml
memasukkan file Views/Shared/_Layout.cshtml
ke dalam setiap tampilan. Properti Layout
dapat digunakan untuk mengatur tampilan tata letak yang berbeda, atau mengaturnya ke null
sehingga tidak ada file tata letak yang akan digunakan.
Buka file tampilan Views/HelloWorld/Index.cshtml
.
Ubah judul dan elemen <h2>
seperti yang disorot di bawah ini.
@{
ViewData["Title"] = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our View Template!</p>
Judul dan <h2>
elemen sedikit berbeda sehingga jelas bagian kode mana yang mengubah tampilan.
ViewData["Title"] = "Movie List";
dalam kode di atas mengatur properti Title
kamus ViewData
ke "Daftar Film". Properti Title
digunakan dalam <title>
elemen HTML di halaman tata letak:
<title>@ViewData["Title"] - Movie App</title>
Simpan perubahan dan navigasikan ke https://localhost:{PORT}/HelloWorld
.
Perhatikan bahwa berikut ini telah berubah:
- Judul jendela browser.
- Judul utama.
- Judul sekunder.
Jika tidak ada perubahan di browser, itu bisa menjadi konten cache yang sedang dilihat. Tekan Ctrl+F5 di browser untuk memaksa respons dari server dimuat. Judul browser dibuat dengan ViewData["Title"]
yang kita tentukan dalam Index.cshtml
templat tampilan dan tambahan "- Aplikasi Film" yang ditambahkan dalam file tata letak.
Konten dalam templat tampilan Index.cshtml
digabungkan dengan templat tampilan Views/Shared/_Layout.cshtml
. Satu respons HTML dikirim ke browser. Templat tata letak memudahkan untuk membuat perubahan yang berlaku di semua halaman dalam aplikasi. Untuk mempelajari selengkapnya, lihat Tata Letak.
Sedikit "data", pesan "Halo dari Templat Tampilan kami!", tertulis langsung di dalam kode. Aplikasi MVC memiliki "V" (tampilan), "C" (pengontrol), tetapi belum ada "M" (model).
Meneruskan Data dari Pengontrol ke Tampilan
Tindakan pengontrol dipanggil sebagai respons terhadap permintaan URL masuk. Kelas pengontrol adalah tempat kode ditulis yang menangani permintaan browser masuk. Pengontrol mengambil data dari sumber data dan memutuskan jenis respons apa yang akan dikirim kembali ke browser. Templat tampilan dapat digunakan dari pengontrol untuk menghasilkan dan memformat respons HTML ke browser.
Pengendali bertanggung jawab untuk menyediakan data yang diperlukan agar templat tampilan dapat merender respons.
Tampilan templat tidak seharusnya:
- Melakukan logika bisnis
- Berinteraksi dengan database secara langsung.
Templat tampilan harus hanya berfungsi dengan data yang disediakan oleh pengontrol. Mempertahankan "pemisahan tanggung jawab" ini membantu menjaga kode:
- Bersih.
- Bisa diuji.
- ** Dapat Dipelihara.
Saat ini, metode Welcome
di kelas HelloWorldController
memproses parameter name
dan ID
, kemudian menampilkan nilainya langsung ke browser.
Daripada meminta pengontrol merender respons ini sebagai string, ubah pengontrol untuk menggunakan templat tampilan sebagai gantinya. Templat tampilan menghasilkan respons dinamis, yang berarti bahwa data yang sesuai harus diteruskan dari pengontrol ke tampilan untuk menghasilkan respons. Lakukan ini dengan meminta pengontrol menempatkan data dinamis (parameter) yang dibutuhkan templat tampilan dalam ViewData
kamus. Templat tampilan kemudian dapat mengakses data dinamis.
Di HelloWorldController.cs
, ubah metode Welcome
untuk menambahkan nilai Message
dan NumTimes
ke kamus ViewData
.
ViewData
Kamus adalah objek dinamis, yang berarti jenis apa pun dapat digunakan. Objek ViewData
tidak memiliki properti yang ditentukan sampai sesuatu ditambahkan. Sistem pengikatan model MVC secara otomatis memetakan parameter name
bernama dan numTimes
dari string kueri ke parameter dalam metode . Lengkapnya HelloWorldController
:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
}
Objek ViewData
kamus berisi data yang akan diteruskan ke tampilan.
Buat templat tampilan Selamat Datang bernama Views/HelloWorld/Welcome.cshtml
.
Anda akan membuat perulangan dalam Welcome.cshtml
templat tampilan yang menampilkan "Halo" NumTimes
. Ganti konten Views/HelloWorld/Welcome.cshtml
dengan yang berikut ini:
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Simpan perubahan Anda dan telusuri ke URL berikut:
https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4
Data diambil dari URL dan diteruskan ke pengontrol menggunakan pengikat model MVC. Pengontrol mengemas data ke dalam ViewData
kamus dan meneruskan objek tersebut ke tampilan. Tampilan kemudian merender data sebagai HTML ke browser.
Dalam sampel sebelumnya, ViewData
kamus digunakan untuk meneruskan data dari pengontrol ke tampilan. Kemudian dalam tutorial, model tampilan digunakan untuk meneruskan data dari pengontrol ke tampilan. Pendekatan model tampilan untuk meneruskan data lebih disukai dibandingkan pendekatan kamus ViewData
.
Dalam tutorial berikutnya, database film dibuat.
ASP.NET Core