ASP.NET MVC 3

(obejmuje aktualizację narzędzi z kwietnia 2011 r.)

ASP.NET MVC 3 to struktura umożliwiająca tworzenie skalowalnych, opartych na standardach aplikacji internetowych przy użyciu dobrze ustalonych wzorców projektowych oraz możliwości ASP.NET i programu .NET Framework.

Jest instalowany obok siebie z ASP.NET MVC 2, więc rozpocznij korzystanie z niego dzisiaj!

Pobierz instalator tutaj

Najważniejsze funkcje

  • Zintegrowany system tworzenia szkieletów rozszerzalny za pośrednictwem narzędzia NuGet
  • Szablony projektów z obsługą języka HTML 5
  • Widoki ekspresyjne, w tym nowy silnik widoków Razor
  • Zaawansowane zaczepienia za pomocą wstrzykiwania zależności i globalnych filtrów akcji
  • Zaawansowana obsługa JavaScript z nienachalnym JavaScript, Walidacją jQuery i Powiązaniem JSON
  • Przeczytaj pełną listę funkcji poniżej

Co nowego w programie ASP.NET MVC 3

Instalacja i pomoc

Omówienie ASP.NET MVC 3

ASP.NET MVC 3 opiera się na ASP.NET MVC 1 i 2, dodając doskonałe funkcje, które upraszczają kod i umożliwiają dokładniejsze rozszerzanie. Ten temat zawiera omówienie wielu nowych funkcji, które są zawarte w tej wersji, zorganizowane w następujących sekcjach:

Rozszerzalne tworzenie szkieletów za pomocą integracji z aplikacją MvcScaffold

Nowy system szkieletów ułatwia poznanie i początek pracy z platformą, jeśli jesteś nowicjuszem, oraz pozwala automatyzować typowe zadania programistyczne, jeśli masz doświadczenie i już wiesz, co robisz.

Jest to obsługiwane przez nowy pakiet szablonowania NuGet o nazwie MvcScaffolding. Termin "Tworzenie szkieletów" jest używany przez wiele technologii programistycznych w znaczeniu "szybkie generowanie podstawowego konspektu Twojego oprogramowania, które można następnie edytować i dostosowywać". Pakiet szkieletu tworzony dla ASP.NET MVC jest bardzo korzystny w kilku scenariuszach:

  • Jeśli uczysz się ASP.NET MVC po raz pierwszy, ponieważ zapewnia szybki sposób uzyskania przydatnego, działającego kodu, który można następnie edytować i dostosować zgodnie z potrzebami. To ratuje cię przed traumą patrząc na pustą stronę i nie mając pojęcia, gdzie zacząć!
  • Jeśli dobrze znasz ASP.NET MVC i teraz eksplorujesz nowe technologie dodatkowe, takie jak obiektowo-relacyjny mapper, silnik widoku, biblioteka testowa itp., warto wiedzieć, że twórca tej technologii mógł również stworzyć pakiet szablonów do niej.
  • Jeśli Twoja praca polega na wielokrotnym tworzeniu podobnych klas lub plików, możesz utworzyć niestandardowe narzędzia scaffolding, które generują oprawy do testów, skrypty wdrażania lub inne potrzebne elementy. Każdy w Twoim zespole może również korzystać z niestandardowych narzędzi do szkieletowania.

Inne funkcje w MvcScaffolding obejmują:

  • Obsługa projektów C# i VB
  • Obsługa silników widoków Razor i ASPX
  • Obsługuje tworzenie szkieletów w obszarach ASP.NET MVC i używanie niestandardowych układów/wzorców widoku
  • Dane wyjściowe można łatwo dostosować, edytując szablony T4
  • Zupełnie nowe szkielety można dodawać przy użyciu niestandardowej logiki programu PowerShell i niestandardowych szablonów T4. Te (i wszystkie podane przez Ciebie parametry niestandardowe) są automatycznie wyświetlane na liście uzupełniania w konsoli.
  • Pakiety NuGet zawierające dodatkowe szkielety dla różnych technologii (np. obecnie istnieje pakiet koncepcyjny dla LINQ to SQL) i można je dowolnie łączyć i dopasowywać

Aktualizacja narzędzi MVC 3 platformy ASP.NET zawiera doskonałą obsługę programu Visual Studio dla tego systemu szkieletowego, takiego jak:

  • Okno dialogowe dodawania kontrolera obsługuje teraz pełne automatyczne tworzenie, odczytywanie, aktualizowanie i usuwanie akcji kontrolera oraz odpowiednie widoki. Domyślnie ten szkielet służy do uzyskiwania dostępu do kodu danych przy użyciu programu EF Code First.
  • Okno dialogowe Dodawanie kontrolera obsługuje rozszerzalne szablony przez pakiety NuGet, takie jak MvcScaffolding. Umożliwia to podłączanie niestandardowych szkieletów do okna dialogowego, co pozwoli na tworzenie szkieletów dla innych technologii dostępu do danych, takich jak NHibernate, a nawet JET z ODBCDirect, jeśli jesteś tak skłonny!

Aby uzyskać więcej informacji na temat tworzenia szkieletów w usłudze ASP.NET MVC 3, zobacz następujące zasoby:

Szablony projektów HTML 5

Okno dialogowe Nowy projekt zawiera pole wyboru umożliwiające obsługę wersji HTML 5 szablonów projektów. Te szablony korzystają z modernizatora 1.7, aby zapewnić zgodność dla języków HTML 5 i CSS 3 w przeglądarkach na poziomie podrzędnym.

Silnik widoku Razor

ASP.NET MVC 3 zawiera nowy silnik widoków Razor, który oferuje następujące korzyści:

  • Składnia Razor jest czysta i zwięzła, co wymaga minimalnej liczby naciśnięć klawiszy.
  • Platforma Razor jest łatwa do nauki, częściowo dlatego, że jest oparta na istniejących językach, takich jak C# i Visual Basic.
  • Program Visual Studio obejmuje funkcję IntelliSense i kolorowanie kodu dla składni Razor.
  • Widoki Razor mogą być testowane jednostkowo bez konieczności odpalania aplikacji lub serwera WWW.

Niektóre nowe funkcje Razor obejmują następujące elementy:

  • @model składnia określająca typ przekazywany do widoku.
  • @* *@ składnia komentarza.
  • Możliwość określenia wartości domyślnych (takich jak layoutpage) raz dla całej witryny.
  • Metoda Html.Raw wyświetlania tekstu bez kodowania HTML.
  • Obsługa udostępniania kodu między wieloma widokami (pliki _viewstart.cshtml lub _viewstart.vbhtml ).

Platforma Razor zawiera również nowych pomocników HTML, takich jak:

  • Chart. Renderuje wykres, oferując te same funkcje co kontrolka wykresu w ASP.NET 4.
  • WebGrid. Renderuje siatkę danych wraz z funkcjami stronicowania i sortowania.
  • Crypto. Używa algorytmów haszujących do tworzenia poprawnie solonych i hashowanych haseł.
  • WebImage. Renderuje obraz.
  • WebMail. Wysyła wiadomość e-mail.

Aby uzyskać więcej informacji na temat razor, zobacz następujące zasoby:

Obsługa wielu silników widoków

Okno dialogowe Dodawanie widoku w programie ASP.NET MVC 3 umożliwia wybranie aparatu widoku, z którym chcesz pracować, a okno dialogowe Nowy projekt umożliwia określenie domyślnego aparatu widoku dla projektu. Możesz wybrać silnik widoków formularzy internetowych (ASPX), Razor lub silnik widoków typu open source, taki jak Spark, NHaml lub NDjango.

Ulepszenia kontrolera

Filtry akcji globalnych

Czasami chcesz wykonać logikę przed uruchomieniem metody akcji lub po uruchomieniu metody akcji. Aby to umożliwić, ASP.NET MVC 2 dostarcza filtry akcji. Filtry akcji to atrybuty niestandardowe, które zapewniają deklaratywny sposób dodawania zachowania przed akcjami i po akcji do określonych metod akcji kontrolera. Jednak w niektórych przypadkach można określić zachowanie przed akcją lub po akcji, które ma zastosowanie do wszystkich metod akcji. MvC 3 umożliwia określanie filtrów globalnych przez dodanie ich do GlobalFilters kolekcji. Aby uzyskać więcej informacji na temat globalnych filtrów akcji, zobacz następujące zasoby:

Nowa właściwość "ViewBag"

Kontrolery MVC 2 obsługują właściwość ViewData, która umożliwia przekazywanie danych do szablonu widoku przy użyciu interfejsu API słownika o dynamicznym powiązaniu. W programie MVC 3 można również użyć nieco prostszej składni z właściwością ViewBag w celu osiągnięcia tego samego celu. Na przykład zamiast pisać ViewData["Message"]="text", możesz napisać ViewBag.Message="text". Nie trzeba definiować żadnych silnie typowanych klas, aby używać właściwości ViewBag. Ponieważ jest to właściwość dynamiczna, można po prostu pobrać lub ustawić właściwości, a będą one dostosowywać się dynamicznie w czasie działania programu. Właściwości ViewBag są przechowywane wewnętrznie jako pary nazw/wartości w słowniku ViewData . (Uwaga: w większości wersji przedpremierowych MVC 3 właściwość ViewBag była nazywana właściwością ViewModel).

Nowe typy "ActionResult"

Następujące ActionResult typy i odpowiadające im metody pomocnicze są nowe lub ulepszone w mvC 3:

  • HttpNotFoundResult. Zwraca kod stanu HTTP 404 do klienta.
  • RedirectResult. Zwraca tymczasowe przekierowanie (kod stanu HTTP 302) lub trwałe przekierowanie (kod stanu HTTP 301), w zależności od parametru logicznego. W połączeniu z tą zmianą klasa Controller ma teraz trzy metody wykonywania stałych przekierowań: RedirectPermanent, RedirectToRoutePermanenti RedirectToActionPermanent. Te metody zwracają instancję RedirectResult, gdzie właściwość Permanent jest ustawiona na true.
  • HttpStatusCodeResult. Zwraca kod stanu HTTP określony przez użytkownika.

Ulepszenia języka JavaScript i AJAX

Domyślnie pomocnicy dla Ajaxa i walidacji w MVC 3 używają podejścia dyskretnego w JavaScript. Niestrudny kod JavaScript unika wstrzykiwania wbudowanego kodu JavaScript do kodu HTML. Dzięki temu kod HTML jest mniejszy i mniej zaśmiecony i ułatwia zamianę lub dostosowywanie bibliotek Języka JavaScript. Pomocnicy sprawdzania poprawności w programie MVC 3 również domyślnie używają jQueryValidate wtyczki. Jeśli chcesz zachowywać się w formacie MVC 2, możesz wyłączyć nietrudny kod JavaScript przy użyciu ustawienia web.config pliku. Aby uzyskać więcej informacji na temat ulepszeń języka JavaScript i Ajax, zobacz następujące zasoby:

Domyślnie włączone sprawdzanie poprawności po stronie klienta

We wcześniejszych wersjach wzorca MVC należy jawnie wywołać metodę Html.EnableClientValidation z widoku, aby umożliwić walidację po stronie klienta. W programie MVC 3 nie jest to już wymagane, ponieważ weryfikacja po stronie klienta jest domyślnie włączona. (Można to wyłączyć przy użyciu ustawienia w pliku web.config ).

Aby walidacja po stronie użytkownika działała, nadal musisz odwołać się do odpowiednich bibliotek jQuery i jQuery Validation na swojej stronie. Możesz hostować te biblioteki na własnym serwerze lub odwoływać się do nich z sieci dostarczania zawartości (CDN), takiej jak sieci CDN firmy Microsoft lub Google.

Zdalny moduł sprawdzania poprawności

ASP.NET MVC 3 obsługuje nową klasę RemoteAttribute , która umożliwia korzystanie z zdalnej obsługi wtyczki walidacji jQuery. Dzięki temu biblioteka weryfikacji po stronie klienta automatycznie wywołuje metodę niestandardową zdefiniowaną na serwerze w celu wykonania logiki weryfikacji, którą można wykonać tylko po stronie serwera.

W poniższym przykładzie atrybut Remote określa, że weryfikacja klienta wywoła akcję o nazwie UserNameAvailable w klasie UsersController w celu zweryfikowania pola UserName.

public class User 
{
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}

W poniższym przykładzie pokazano odpowiedni kontroler.

public class UsersController 
{ 
    public bool UserNameAvailable(string username) 
    { 
        if(MyRepository.UserNameExists(username)) 
        { 
            return "false"; 
        } 
        return "true"; 
    } 
}

Aby uzyskać więcej informacji na temat używania atrybutu, zobacz Remote w bibliotece MSDN).

Obsługa wiązań JSON

ASP.NET MVC 3 zawiera wbudowaną obsługę powiązań JSON, która umożliwia metodom akcji odbieranie danych zakodowanych w formacie JSON i powiązanie modelu z parametrami metody akcji. Ta funkcja jest przydatna w scenariuszach obejmujących szablony klienta i powiązanie danych. (Szablony klienta umożliwiają formatowanie i wyświetlanie pojedynczego elementu danych lub zestawu elementów danych przy użyciu szablonów wykonywanych na kliencie). MvC 3 umożliwia łatwe łączenie szablonów klienta z metodami akcji na serwerze, który wysyła i odbiera dane JSON. Aby uzyskać więcej informacji na temat obsługi powiązań JSON, zobacz sekcję Ulepszenia języka JavaScript i AJAX w wpisie w blogu Scott Guthrie's MVC 3 Preview.

Ulepszenia walidacji modelu

Atrybuty metadanych w "DataAnnotations"

ASP.NET MVC 3 obsługuje DataAnnotations atrybuty metadanych, takie jak DisplayAttribute.

Klasa "ValidationAttribute"

Klasa ValidationAttribute została ulepszona w programie .NET Framework 4, aby obsługiwać nowe IsValid przeciążenie, które zawiera więcej informacji na temat bieżącego kontekstu weryfikacji, takiego jak weryfikowany obiekt. Umożliwia to bogatsze scenariusze, w których można zweryfikować bieżącą wartość na podstawie innej właściwości modelu. Na przykład nowy CompareAttribute atrybut umożliwia porównanie wartości dwóch właściwości modelu. W poniższym przykładzie właściwość ComparePassword musi być zgodna z polem Password, aby była prawidłowa.

public class User
{ 
    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}

Interfejsy weryfikacji

Interfejs IValidatableObject umożliwia przeprowadzenie weryfikacji na poziomie modelu i umożliwia dostarczanie komunikatów o błędach weryfikacji specyficznych dla stanu ogólnego modelu lub między dwiema właściwościami w modelu. MVC 3 teraz pobiera błędy z interfejsu IValidatableObject podczas wiązania modelu i automatycznie sygnalizuje lub wyróżnia pola, których dotyczy problem, korzystając z wbudowanych pomocników formularzy HTML.

Interfejs IClientValidatable umożliwia ASP.NET MVC ustalanie w czasie wykonywania, czy moduł sprawdzania poprawności ma obsługę weryfikacji klienta. Ten interfejs został zaprojektowany tak, aby można go było zintegrować z różnymi strukturami weryfikacji.

Aby uzyskać więcej informacji na temat interfejsów weryfikacji, zobacz sekcję Ulepszenia walidacji modeluw wpisie w blogu Scott Guthrie MVC 3 w wersji zapoznawczej. (Należy jednak pamiętać, że odwołanie do "IValidateObject" w blogu powinno mieć wartość "IValidatableObject".

Ulepszenia iniekcji zależności

ASP.NET MVC 3 zapewnia lepszą obsługę stosowania wstrzykiwania zależności (DI) i integracji z kontenerami iniekcji zależności lub inwersji kontroli (IOC). Obsługa DI została dodana w następujących obszarach:

  • Kontrolery (rejestrowanie i wstrzykiwanie fabryk kontrolerów, wstrzykiwanie kontrolerów).
  • Widoki (rejestrowanie i wstrzykiwanie silników widoków, wstrzykiwanie zależności do stron widoku).
  • Filtry akcji (lokalizowanie i wstrzykiwanie filtrów).
  • Powiązania modelu (rejestrowanie i wstrzykiwanie).
  • Dostawcy walidacji modelu (rejestrowanie i wstrzykiwanie).
  • Dostawcy metadanych modelu (rejestrowanie i wstrzykiwanie).
  • Dostawcy wartości (rejestrowanie i wstrzykiwanie).

MvC 3 obsługuje bibliotekę lokalizatora usługi Common Service i dowolny kontener DI, który obsługuje interfejs tej biblioteki IServiceLocator . Obsługuje również nowy IDependencyResolver interfejs, który ułatwia integrowanie struktur DI.

Aby uzyskać więcej informacji na temat di w MVC 3, zobacz następujące zasoby:

Inne nowe funkcje

Integracja narzędzia NuGet

ASP.NET MVC 3 automatycznie instaluje i włącza pakiet NuGet w ramach konfiguracji. NuGet to bezpłatny menedżer pakietów typu open source, który ułatwia znajdowanie, instalowanie i używanie bibliotek i narzędzi platformy .NET w projektach. Współdziała ona ze wszystkimi typami projektów programu Visual Studio (w tym ASP.NET Web Forms i ASP.NET MVC).

NuGet umożliwia deweloperom, którzy utrzymują projekty open source (na przykład projekty takie jak Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks i Elmah), aby spakować swoje biblioteki i zarejestrować je w galerii online. Następnie deweloperzy platformy .NET mogą używać jednej z tych bibliotek do znajdowania pakietu i instalowania go w projektach, nad którymi pracują.

W przypadku aktualizacji narzędzi ASP.NET 3 szablony projektów zawierają biblioteki JavaScript jako wstępnie zainstalowane pakiety NuGet, co umożliwia ich aktualizację za pośrednictwem narzędzia NuGet. Program Entity Framework Code First jest również wstępnie zainstalowany jako pakiet NuGet.

Aby uzyskać więcej informacji na temat narzędzia NuGet, zobacz dokumentację narzędzia NuGet.

Buforowanie danych wyjściowych częściowej strony

ASP.NET MVC obsługuje buforowanie danych wyjściowych pełnej strony od wersji 1. MvC 3 obsługuje również buforowanie danych wyjściowych częściowych stron, co umożliwia łatwe buforowanie regionów lub fragmentów odpowiedzi. Aby uzyskać więcej informacji na temat buforowania, zobacz sekcję Buforowanie danych wyjściowych częściowych stron w wpisie na blogu Scotta Guthrie'a na temat kandydata do wydania MVC 3 oraz sekcję Buforowanie danych wyjściowych akcji podrzędnych w informacjach o wersji MVC 3.

Szczegółowa kontrola nad weryfikacją żądań

ASP.NET MVC ma wbudowaną walidację żądań, która automatycznie pomaga chronić przed atakami polegającymi na wstrzyknięciu kodu XSS i HTML. Jednak czasami chcesz jawnie wyłączyć walidację żądania, na przykład jeśli chcesz zezwolić użytkownikom na publikowanie zawartości HTML (na przykład w wpisach w blogu lub zawartości CMS). Teraz można dodać atrybut AllowHtml do modeli lub wyświetlić modele, aby wyłączyć walidację żądań dla poszczególnych właściwości podczas tworzenia powiązania modelu. Aby uzyskać więcej informacji na temat weryfikacji żądań, zobacz następujące zasoby:

Rozszerzalne okno dialogowe "Nowy projekt"

W ASP.NET MVC 3 można dodawać szablony projektów, aparaty wyświetlania i struktury projektów testów jednostkowych do okna dialogowego Nowy projekt .

Ulepszenia szkieletowania szablonów

Szablony szkieletowe ASP.NET MVC 3 lepiej identyfikują właściwości klucza podstawowego w modelach i obsługują je odpowiednio niż miało to miejsce we wcześniejszych wersjach MVC. (Na przykład szablony tworzenia szkieletów teraz upewniają się, że klucz podstawowy nie jest generowany jako edytowalne pole w formularzu.)

Domyślnie szkielety tworzenia i edytowania teraz używają pomocnika Html.EditorFor zamiast pomocnika Html.TextBoxFor. Zwiększa to obsługę metadanych w modelu w postaci atrybutów adnotacji danych, gdy w oknie dialogowym Dodawanie widoku zostanie wygenerowany widok.

Nowe przeciążenia dla "Html.LabelFor" i "Html.LabelForModel"

Nowe przeciążenia zostały dodane dla metod pomocniczych LabelFor i LabelForModel. Nowe przeciążenia umożliwiają określenie lub zastąpienie tekstu etykiety.

Obsługa kontrolera bez sesji

W ASP.NET MVC 3 można wskazać, czy klasa kontrolera ma używać stanu sesji, a jeśli tak, czy stan sesji powinien być odczyt/zapis lub tylko do odczytu. Aby uzyskać więcej informacji na temat obsługi kontrolera bez sesji, zobacz Uwagi do wydania MVC 3.

Nowa klasa "AdditionalMetadataAttribute"

Możesz użyć atrybutu AdditionalMetadata , aby wypełnić ModelMetadata.AdditionalValues słownik właściwości modelu. Jeśli na przykład model widoku ma właściwość, która powinna być wyświetlana tylko administratorowi, możesz dodać adnotację do tej właściwości, jak pokazano w poniższym przykładzie:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

Te metadane są udostępniane każdemu szablonowi wyświetlania lub edytora po renderowaniu modelu widoku produktu. Należy interpretować informacje o metadanych.

Ulepszenia KontroleraKonta

Funkcja AccountController w szablonie projektu internetowego została znacznie ulepszona.

Nowy szablon projektu intranetowego

Dołączono nowy szablon projektu intranetowego, który umożliwia uwierzytelnianie systemu Windows i usuwa element AccountController.