Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Autor : Rick Anderson
Uwaga / Notatka
Zaktualizowana wersja tego samouczka jest dostępna tutaj przy użyciu najnowszej wersji programu Visual Studio. W nowym samouczku jest używany ASP.NET Core MVC, który oferuje wiele ulepszeń w porównaniu do tego samouczka.
W tym samouczku przedstawiono ASP.NET Core MVC z kontrolerami i widokami. Razor Pages to nowa alternatywa w ASP.NET Core, model programowania oparty na stronach, który ułatwia tworzenie internetowego interfejsu użytkownika, czyniąc je łatwiejszym i bardziej wydajnym. Zalecamy wypróbowanie samouczka razor Pages przed wersją MVC. Samouczek Razor Pages
- Jest łatwiejsze do naśladowania.
- Obejmuje więcej funkcji.
- Jest preferowanym podejściem do tworzenia nowych aplikacji.
W tej sekcji utworzysz nową MoviesController klasę i napiszesz kod, który pobiera dane filmu i wyświetla je w przeglądarce przy użyciu szablonu widoku.
Skompiluj aplikację przed przejściem do następnego kroku. Jeśli nie skompilujesz aplikacji, wystąpi błąd podczas dodawania kontrolera.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy folder Kontrolery , a następnie kliknij przycisk Dodaj, a następnie kontroler.
W oknie dialogowym Dodawanie szkieletu kliknij pozycję Kontroler MVC 5 z widokami, przy użyciu programu Entity Framework, a następnie kliknij przycisk Dodaj.
Wybierz Movie (MvcMovie.Models) dla klasy Model.
Wybierz MovieDBContext (MvcMovie.Models) jako klasę kontekstu danych.
W polu Nazwa kontrolera wprowadź MoviesController.
Na poniższej ilustracji przedstawiono ukończone okno dialogowe.
Kliknij przycisk Dodaj. (Jeśli wystąpi błąd, prawdopodobnie nie skompilujesz aplikacji przed rozpoczęciem dodawania kontrolera). Program Visual Studio tworzy następujące pliki i foldery:
- Plik MoviesController.cs w folderze Controllers.
- Folder Views\Movies.
- Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml i Index.cshtml w nowym folderze Views\Movies.
Program Visual Studio automatycznie utworzył metody akcji CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) oraz widoki (automatyczne tworzenie metod akcji CRUD i widoków jest nazywane szkieletowaniem). Masz teraz w pełni funkcjonalną aplikację internetową, która umożliwia tworzenie, wyświetlanie, edytowanie i usuwanie wpisów o filmach.
Uruchom aplikację i kliknij link MVC Movie (lub przejdź do Movies kontrolera, dołączając /Movies do adresu URL na pasku adresu przeglądarki). Ponieważ aplikacja opiera się na routingu domyślnym (zdefiniowanym w pliku App_Start\RouteConfig.cs ), żądanie http://localhost:xxxxx/Movies przeglądarki jest kierowane do domyślnej IndexMovies metody akcji kontrolera. Innymi słowy żądanie http://localhost:xxxxx/Movies przeglądarki jest w rzeczywistości takie samo jak żądanie http://localhost:xxxxx/Movies/Indexprzeglądarki . Wynik jest pustą listą filmów, ponieważ nie dodano jeszcze żadnych filmów.
Tworzenie filmu
Wybierz link Utwórz nowy. Wprowadź szczegółowe informacje o filmie, a następnie kliknij przycisk Utwórz .
Uwaga / Notatka
W polu Cena może nie być możliwe wprowadzenie punktów dziesiętnych lub przecinków. Aby obsługiwać walidację jQuery dla ustawień regionalnych innych niż angielski, które używają przecinka (",") dla punktu dziesiętnego oraz formatów dat innych niż US-English, należy uwzględnić globalize.js i określony plik kultury/globalize.cultures.js (z https://github.com/jquery/globalize) oraz JavaScript do użycia Globalize.parseFloat. Pokażę, jak to zrobić w następnym samouczku. Na razie wprowadź tylko liczby całkowite, takie jak 10.
Kliknięcie przycisku Utwórz powoduje opublikowanie formularza na serwerze, na którym informacje o filmie są zapisywane w bazie danych. Następnie nastąpi przekierowanie do adresu URL /Movies , w którym możesz zobaczyć nowo utworzony film na liście.
Utwórz jeszcze kilka wpisów filmowych. Spróbuj użyć linków Edytuj, Szczegóły i Usuń , które są funkcjonalne.
Badanie wygenerowanego kodu
Otwórz plik Controllers\MoviesController.cs i sprawdź wygenerowaną Index metodę. Poniżej przedstawiono część kontrolera filmu z metodą Index.
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Żądanie do Movies kontrolera zwraca wszystkie wpisy w Movies tabeli, a następnie przekazuje wyniki do Index widoku. Poniższa linijka z klasy MoviesController tworzy wystąpienie kontekstu bazy danych filmu, jak opisano wcześniej. Kontekst bazy danych filmów umożliwia wykonywanie zapytań, edytowanie i usuwanie filmów.
private MovieDBContext db = new MovieDBContext();
Silnie typizowane modele i słowo kluczowe @model
Wcześniej w tym samouczku pokazano, jak kontroler może przekazywać dane lub obiekty do szablonu widoku za pomocą obiektu ViewBag. Jest ViewBag to obiekt dynamiczny, który zapewnia wygodny, opóźniony sposób przekazywania informacji do widoku.
MvC zapewnia również możliwość przekazywania silnie typiowanych obiektów do szablonu widoku. To silnie typizowane podejście umożliwia lepsze sprawdzanie czasu kompilacji kodu i bogatszą funkcję IntelliSense w edytorze programu Visual Studio. Mechanizm szkieletowania w Visual Studio używał tego podejścia (czyli przekazywania silnie typizowanego modelu) z klasami i szablonami widoków podczas tworzenia metod i widoków.
W pliku Controllers\MoviesController.cs sprawdź wygenerowaną Details metodę. Metoda Details została przedstawiona poniżej.
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Parametr id jest zwykle przekazywany jako dane trasy, na przykład http://localhost:1234/movies/details/1 spowoduje ustawienie kontrolera na kontroler filmów, akcję na details, a id na 1. Możesz również przekazać identyfikator przy pomocy parametru zapytania w następujący sposób:
http://localhost:1234/movies/details?id=1
Jeśli element Movie zostanie znaleziony, wystąpienie Movie modelu zostanie przekazane do Details widoku:
return View(movie);
Sprawdź zawartość pliku Views\Movies\Details.cshtml :
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Movie</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Title)
</dt>
@*Markup omitted for clarity.*@
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
Dołączając instrukcję @model w górnej części pliku szablonu widoku, można określić typ obiektu, którego oczekuje widok. Po utworzeniu kontrolera filmu program Visual Studio automatycznie uwzględnił następującą @model instrukcję w górnej części pliku Details.cshtml :
@model MvcMovie.Models.Movie
Ta @model dyrektywa umożliwia, przy użyciu silnie typizowanego obiektu Model, dostęp do filmu, który kontroler przekazał do widoku. Na przykład w szablonie Details.cshtml kod przekazuje każde pole filmu do HTML pomocnika DisplayNameForDisplayFor z silnie typizowanym obiektem Model. Metody Create i Edit oraz szablony wyświetlania również przekazują obiekt modelu filmu.
Sprawdź szablon widoku Index.cshtml i metodę Index w pliku MoviesController.cs . Zwróć uwagę, że kod tworzy List obiekt, gdy wywołuje pomocniczą metodę View w metodzie akcji Index. Następnie kod przekazuje tę Movies listę z Index metody akcji do widoku:
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Po utworzeniu kontrolera filmu program Visual Studio automatycznie uwzględnił następującą @model instrukcję w górnej części pliku Index.cshtml :
@model IEnumerable<MvcMovie.Models.Movie>
Ta @model dyrektywa umożliwia przy użyciu silnie typizowanego Model obiektu dostęp do listy filmów, które kontroler przekazuje do widoku. Na przykład w szablonie Index.cshtml kod przechodzi przez filmy, wykonując instrukcję foreach na silnie typizowanym obiekcie Model.
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<th>
@Html.DisplayFor(modelItem => item.Rating)
</th>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
Ponieważ obiekt Model jest silnie typowany jako obiekt IEnumerable<Movie>, każdy obiekt item w pętli jest typu Movie. Między innymi oznacza to, że uzyskujesz kontrolę czasu kompilacji kodu i pełną obsługę funkcji IntelliSense w edytorze kodu:
Praca z bazą danych LocalDB programu SQL Server
Program Entity Framework Code First wykrył, że parametr połączenia z bazą danych, który został podany, wskazywał na Movies bazę danych, której jeszcze nie ma, więc Code First automatycznie utworzył bazę danych. Możesz sprawdzić, czy został on utworzony, patrząc w folderze App_Data . Jeśli nie widzisz pliku Movies.mdf , kliknij przycisk Pokaż wszystkie pliki na pasku narzędzi Eksplorator rozwiązań , kliknij przycisk Odśwież , a następnie rozwiń folder App_Data .
Kliknij dwukrotnie Movies.mdf , aby otworzyć EKSPLORATORA SERWERA, a następnie rozwiń folder Tables , aby wyświetlić tabelę Filmy. Zwróć uwagę na ikonę klucza obok identyfikatora. Domyślnie program EF utworzy właściwość o nazwie ID klucza podstawowego. Aby uzyskać więcej informacji na temat EF i MVC, zobacz doskonały samouczek Toma Dykstry dotyczący MVC i EF.
Kliknij prawym przyciskiem myszy tabelę Movies i wybierz polecenie Pokaż dane tabeli, aby wyświetlić utworzone dane.
Kliknij prawym przyciskiem myszy tabelę Movies i wybierz polecenie Otwórz definicję tabeli , aby wyświetlić strukturę tabeli utworzoną przez program Entity Framework Code First.
Zwróć uwagę na sposób mapowania schematu Movies tabeli na utworzoną wcześniej klasę Movie . Program Entity Framework Code First automatycznie utworzył ten schemat na podstawie klasy Movie .
Po zakończeniu zamknij połączenie, klikając prawym przyciskiem myszy pozycję MovieDBContext i wybierając pozycję Zamknij połączenie. (Jeśli nie zamkniesz połączenia, może zostać wyświetlony błąd przy następnym uruchomieniu projektu).
Masz teraz bazę danych i strony do wyświetlania, edytowania, aktualizowania i usuwania danych. W następnym samouczku przeanalizujemy resztę kodu szkieletowego i dodamy metodę SearchIndex oraz widok SearchIndex, który umożliwia wyszukiwanie filmów w tej bazie danych. Aby uzyskać więcej informacji na temat korzystania z platformy Entity Framework z mvC, zobacz Tworzenie modelu danych programu Entity Framework dla aplikacji MVC ASP.NET.