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.
MVC to skrót od model-view-controller. MVC to wzorzec tworzenia aplikacji, które są dobrze zaprojektowane, testowalne i łatwe do utrzymania. Aplikacje oparte na wzorcach MVC zawierają:
- Odels : klasy reprezentujące dane aplikacji i korzystające z logiki walidacji do wymuszania reguł biznesowych dla tych danych.
- Vews : pliki szablonów używane przez aplikację do dynamicznego generowania odpowiedzi HTML.
- C ontrollers: Klasy, które obsługują przychodzące żądania przeglądarki, pobierają dane modelu, a następnie określają szablony widoków, które zwracają odpowiedź na przeglądarkę.
Omówimy wszystkie te pojęcia w tej serii samouczków i pokażemy, jak używać ich do tworzenia aplikacji.
Zacznijmy od utworzenia klasy 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 — pusty, a następnie kliknij przycisk Dodaj.
Nadaj nowemu kontrolerowi nazwę "HelloWorldController" i kliknij przycisk Dodaj.
Zwróć uwagę na to, że w Eksploratorze rozwiązań został utworzony nowy plik o nazwie HelloWorldController.cs i nowy folder Views\HelloWorld. Kontroler jest otwarty w środowisku IDE.
Zastąp zawartość pliku następującym kodem.
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my <b>default</b> action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
Metody kontrolera będą zwracać ciąg HTML jako przykład. Kontroler ma nazwę HelloWorldController , a pierwsza metoda nosi nazwę Index. Wywołajmy ją z przeglądarki. Uruchom aplikację (naciśnij klawisz F5 lub Ctrl+F5). W przeglądarce dołącz ciąg "HelloWorld" do ścieżki na pasku adresu. (Na przykład na poniższej ilustracji to jest http://localhost:1234/HelloWorld.) Strona w przeglądarce będzie wyglądać wiernie poniższemu zrzutowi ekranu. W powyższej metodzie kod zwrócił ciąg bezpośrednio. Powiedziałeś systemowi, aby po prostu zwrócił jakiś kod HTML, i tak się stało!
ASP.NET MVC wywołuje różne klasy kontrolerów (i różne metody akcji w nich) w zależności od przychodzącego adresu URL. Domyślna logika routingu adresów URL używana przez ASP.NET MVC używa formatu podobnego do tego, aby określić kod do wywołania:
/[Controller]/[ActionName]/[Parameters]
Format routingu można ustawić w pliku App_Start/RouteConfig.cs .
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Po uruchomieniu aplikacji i nie podając żadnych segmentów adresów URL, domyślnie zostanie użyty kontroler "Home" i metoda akcji "Index" określona w sekcji wartości domyślnych kodu powyżej.
Pierwsza część adresu URL określa klasę kontrolera do wykonania. Tak więc /HelloWorld odnosi się do klasy HelloWorldController. Druga część adresu URL określa metodę akcji w klasie do wykonania. Dlatego /HelloWorld/Index spowoduje wykonanie metody klasy HelloWorldController. Zwróć uwagę, że musieliśmy przejść tylko do /HelloWorld , a Index metoda została użyta domyślnie. Jest to spowodowane tym, że metoda o nazwie Index jest domyślną metodą, która zostanie wywołana na kontrolerze, jeśli nie zostanie jawnie określona. Trzecia część segmentu adresu URL ( Parameters) dotyczy danych trasy. W dalszej części tego samouczka zobaczymy dane trasy.
Przejdź do http://localhost:xxxx/HelloWorld/Welcome. Metoda Welcome jest uruchamiana i zwraca ciąg "Jest to metoda akcji powitalnej...". Domyślne mapowanie MVC to /[Controller]/[ActionName]/[Parameters]. Dla tego adresu URL kontroler jest HelloWorld i Welcome jest metodą akcji. Jeszcze nie użyto części [Parameters] adresu URL.
Zmodyfikujmy nieco przykład, aby można było przekazać niektóre informacje o parametrach z adresu URL do kontrolera (na przykład /HelloWorld/Welcome?name=Scott&numtimes=4). Zmień metodę Welcome, aby zawierała dwa parametry, zgodnie z poniższym przykładem. Należy pamiętać, że kod używa funkcji opcjonalnego parametru języka C#, aby wskazać, że numTimes parametr powinien być domyślnie ustawiony na 1, jeśli nie przekazano żadnej wartości dla tego parametru.
public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}
Uwaga / Notatka
Uwaga dotycząca zabezpieczeń: powyższy kod używa kodu HttpUtility.HtmlEncode w celu ochrony aplikacji przed złośliwymi danymi wejściowymi (tj. JavaScript). Aby uzyskać więcej informacji , zobacz How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings (Jak chronić przed programami wykorzystującymi luki w zabezpieczeniach skryptów w aplikacji internetowej przez zastosowanie kodowania HTML do ciągów).
Uruchom aplikację i przejdź do przykładowego adresu URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). Możesz wypróbować różne wartości dla name i numtimes w adresie URL.
System powiązania modelu MVC ASP.NET automatycznie mapuje nazwane parametry z ciągu zapytania na pasku adresu na parametry w metodzie.
W powyższym przykładzie segment adresu URL ( Parameters) nie jest używany, parametry name i numTimes są przekazywane jako ciągi zapytania. Który? (znak zapytania) w powyższym adresie URL jest separatorem, a następują ciągi zapytania. Znak i oddziela ciągi zapytania.
Zastąp metodę Welcome następującym kodem:
public string Welcome(string name, int ID = 1)
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}
Uruchom aplikację i wprowadź następujący adres URL: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott
Tym razem trzeci segment adresu URL był zgodny z parametrem trasy ID.. Metoda akcji Welcome zawiera parametr (ID), odpowiadający specyfikacji adresu URL w metodzie RegisterRoutes.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
W aplikacjach ASP.NET MVC bardziej typowe jest przekazywanie parametrów jako danych trasy (tak jak w przypadku identyfikatora powyżej) niż przekazywanie ich jako parametrów zapytania. Możesz również dodać trasę, aby przekazać zarówno name, jak i numtimes w parametrach jako dane trasy w adresie URL. W pliku App_Start\RouteConfig.cs dodaj trasę "Hello":
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Hello",
url: "{controller}/{action}/{name}/{id}"
);
}
}
Uruchom aplikację i przejdź do /localhost:XXX/HelloWorld/Welcome/Scott/3.
W przypadku wielu aplikacji MVC trasa domyślna działa prawidłowo. W dalszej części tego samouczka dowiesz się, jak przekazywać dane przy użyciu powiązania modelu i nie trzeba modyfikować trasy domyślnej.
W tych przykładach kontroler wykonuje część MVC zwaną "VC" — czyli pracę obejmującą rolę widoku i kontrolera. Kontroler zwraca kod HTML bezpośrednio. Zwykle nie chcesz, aby kontrolery zwracały kod HTML bezpośrednio, ponieważ staje się to bardzo kłopotliwe dla kodu. Zamiast tego zazwyczaj użyjemy oddzielnego pliku szablonu widoku, aby ułatwić generowanie odpowiedzi HTML. Przyjrzyjmy się dalej, jak możemy to zrobić.