informacje o wersji ASP.NET MVC 3

Omówienie

W tym dokumencie opisano wydanie ASP.NET MVC 3 RTM dla programu Visual Studio 2010. ASP.NET MVC to platforma do tworzenia aplikacji internetowych korzystających ze wzorca MODEL-View-Controller (MVC). Instalator ASP.NET MVC 3 zawiera następujące składniki:

  • ASP.NET składników środowiska uruchomieniowego MVC 3
  • ASP.NET narzędzi MVC 3 Visual Studio 2010
  • ASP.NET składników czasu wykonywania stron internetowych
  • narzędzia ASP.NET Web Pages Visual Studio 2010
  • Microsoft Package Manager for .NET (NuGet)
  • Aktualizacja programu Visual Studio 2010, która umożliwia obsługę składni Razor. (Aby uzyskać szczegółowe informacje, zobacz artykuł bazy wiedzy 2483190).

Pełny zestaw informacji o wersji dla każdej wersji wstępnej ASP.NET MVC 3 można znaleźć w witrynie internetowej ASP.NET pod następującym adresem URL:

https://www.asp.net/learn/whitepapers/mvc3-release-notes

Uwagi dotyczące instalacji

Aby zainstalować ASP.NET MVC 3 RTM przy użyciu Instalatora platformy internetowej (Web PI), odwiedź następującą stronę:

https://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

Możesz też pobrać instalator ASP.NET MVC 3 RTM dla programu Visual Studio 2010 na następującej stronie:

https://go.microsoft.com/fwlink/?LinkID=208140

ASP.NET MVC 3 można zainstalować i uruchomić równolegle z ASP.NET MVC 2.

Wymagania programowe

Składniki czasu wykonywania ASP.NET MVC 3 wymagają następującego oprogramowania:

  • .NET Framework w wersji 4.

    ASP.NET narzędzia MVC 3 Visual Studio 2010 wymagają następującego oprogramowania:

  • Visual Studio 2010 lub Visual Web Developer 2010 Express.

Dokumentacja

Dokumentacja ASP.NET MVC jest dostępna w witrynie sieci Web MSDN pod następującym adresem URL:

https://go.microsoft.com/fwlink/?LinkId=205717

Samouczki i inne informacje o ASP.NET MVC są dostępne na stronie MVC witryny ASP.NET sieci Web pod następującym adresem URL:

https://www.asp.net/mvc/

Pomoc techniczna

Jest to w pełni obsługiwana wersja. Informacje o uzyskiwaniu pomocy technicznej można znaleźć w witrynie internetowej pomoc techniczna firmy Microsoft.

Możesz również publikować pytania dotyczące tej wersji na forum ASP.NET MVC, w którym członkowie społeczności ASP.NET często mogą zapewnić nieformalną pomoc techniczną:

https://forums.asp.net/1146.aspx

Uaktualnianie ASP.NET projektu MVC 2 do aktualizacji ASP.NET NARZĘDZI MVC 3

ASP.NET MVC 3 można zainstalować obok ASP.NET MVC 2 na tym samym komputerze, co zapewnia elastyczność podczas uaktualniania ASP.NET aplikacji MVC 2 do ASP.NET MVC 3.

Aby ręcznie uaktualnić istniejącą aplikację ASP.NET MVC 2 do wersji 3, wykonaj następujące czynności:

  1. Utwórz nowy pusty projekt ASP.NET MVC 3 na komputerze. Ten projekt będzie zawierać pliki wymagane do uaktualnienia.

  2. Skopiuj następujące pliki z projektu ASP.NET MVC 3 do odpowiedniej lokalizacji projektu ASP.NET MVC 2. Należy zaktualizować wszystkie odwołania do biblioteki jQuery, aby uwzględnić nową nazwę pliku (jQuery-1.5.1.js):

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. Skopiuj folder packages w katalogu głównym pustego rozwiązania projektu MVC 3 ASP.NET do katalogu głównego rozwiązania, który znajduje się w katalogu, w którym znajduje się plik sln rozwiązania.

  4. Jeśli projekt MVC 2 ASP.NET zawiera dowolne obszary, skopiuj plik /Views/Web.config do folderu Views każdego obszaru.

  5. W obu plikach Web.config w projekcie ASP.NET MVC 2 globalnie wyszukaj i zastąp ASP.NET wersję MVC. Znajdź następujące elementy:

    System.Web.Mvc, Version=2.0.0.0
    

    Zastąp go następującymi elementami:

    System.Web.Mvc, Version=3.0.0.0
    
  6. W Eksplorator rozwiązań usuń odwołanie do pliku System.Web.Mvc (który wskazuje bibliotekę DLL z wersji 2), a następnie dodaj odwołanie do pliku System.Web.Mvc (v3.0.0.0).

  7. Dodaj odwołanie do System.Web.WebPages.dll i System.Web.Helpers.dll. Te zestawy znajdują się w następujących folderach:

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  8. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę projektu i wybierz pozycję Zwolnij projekt. Następnie ponownie kliknij prawym przyciskiem myszy nazwę projektu i wybierz polecenie Edytuj projectName.csproj.

  9. Znajdź element ProjectTypeGuids i zastąp element {F85E285D-A4E0-4152-9332-AB1D724D3325} ciągiem {E53F8FEA-EAE0-44A6-8774-FFD645390401}.

  10. Zapisz zmiany, kliknij prawym przyciskiem myszy projekt, a następnie wybierz polecenie Załaduj ponownie projekt.

  11. W głównym pliku Web.config aplikacji dodaj następujące ustawienia do sekcji zestawów .

    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, 
         PublicKeyToken=31BF3856AD364E35" />
    
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral,
         PublicKeyToken=31BF3856AD364E35" />
    
  12. Jeśli projekt odwołuje się do dowolnych bibliotek innych firm kompilowanych przy użyciu ASP.NET MVC 2, dodaj następujący wyróżniony element bindingRedirect do pliku Web.config w katalogu głównym aplikacji w sekcji konfiguracji :

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc"
               publicKeyToken="31bf3856ad364e35"/>
           <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
         </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

Zmiany w aktualizacji narzędzi ASP.NET MVC 3

W tej sekcji opisano zmiany wprowadzone w wersji ASP.NET MVC 3 Tools Update od wersji ASP.NET MVC 3 RTM.

Okno dialogowe "Dodawanie kontrolera" może teraz utworzyć szkielet kontrolerów z widokami i kodem dostępu do danych

Tworzenie szkieletu to sposób szybkiego generowania kontrolera i widoków dla aplikacji. Po wygenerowaniu kodu można go edytować w celu spełnienia wymagań projektu.

Aby uruchomić okno dialogowe Dodawanie kontrolera w ASP.NET MVC 3, kliknij prawym przyciskiem myszy folder Controllers w Eksplorator rozwiązań, kliknij przycisk Dodaj, a następnie kliknij przycisk Kontroler. Okno dialogowe zostało ulepszone w celu zaoferowania dodatkowych opcji tworzenia szkieletów.

Zrzut ekranu przedstawiający okno dialogowe Dodawanie kontrolera.

Domyślnie dostępne są trzy szablony szkieletów.

Pusty kontroler

Ten szablon generuje pusty plik kontrolera. Ten szablon jest odpowiednikiem niezaewidencjonowania dodawania akcji do tworzenia, edytowania, szczegółów, usuwania scenariuszy w poprzednich wersjach ASP.NET MVC. W przypadku wybrania tej opcji nie są dostępne żadne dalsze opcje.

Kontroler z pustymi akcjami odczytu/zapisu

Ten szablon generuje plik kontrolera, który zawiera wszystkie wymagane metody akcji, ale nie kod implementacji w metodach. Ten szablon jest odpowiednikiem sprawdzania dodawania akcji do tworzenia, edytowania, szczegółów, usuwania scenariuszy w poprzednich wersjach ASP.NET MVC. W przypadku wybrania tej opcji nie są dostępne żadne dalsze opcje.

Kontroler z akcjami odczytu/zapisu i widokami przy użyciu programu Entity Framework

Ten szablon umożliwia szybkie utworzenie działającego interfejsu użytkownika wprowadzania danych. Generuje kod, który obsługuje szereg typowych wymagań i scenariuszy, takich jak:

  • Dostęp do danych. Wygenerowany kod odczytuje i zapisuje jednostki w bazie danych. Działa ona z podejściem Entity Framework Code First, jeśli wybierzesz istniejącą klasę kontekstu danych lub jeśli zezwolisz szablonowi na wygenerowanie nowej klasy DbContext . Działa również z podejściem Entity Framework Database First lub Model First, jeśli wybierzesz istniejącą klasę ObjectContext .

  • Walidacja. Wygenerowany kod używa ASP.NET powiązania modelu MVC i funkcji metadanych, dzięki czemu przesyłanie formularzy jest weryfikowane zgodnie z regułami zadeklarowanymi w klasie modelu. Obejmuje to wbudowane reguły sprawdzania poprawności, takie jak wymagane i stringLength , oraz niestandardowe reguły walidacji.

  • Relacje jeden do wielu. Jeśli zdefiniujesz relacje jeden do wielu kluczy obcych między klasami modelu, wygenerowany kod utworzy listy rozwijane służące do wybierania powiązanych jednostek. Można na przykład zdefiniować następujące klasy modeli zgodnie z konwencjami Entity Framework Code First:

    public class Product
    {
         public int ProductId { get; set; }
         [Required]
         public string Name { get; set; }
    
         // Product belongs to Category
         public int CategoryId { get; set; }
         public virtual Category Category { get; set; }
    }
    public class Category
    {
         public int CategoryId { get; set; }
         [Required]
         public string Name { get; set; }
    }
    

    Po utworzeniu szkieletu kontrolera klasy Product jego widoki umożliwią użytkownikom wybranie obiektu Kategoria dla każdego wystąpienia produktu .

    Ten szablon umożliwia dodatkowe opcje w oknie dialogowym Dodawanie kontrolera . W przypadku klasy modelu możesz wybrać dowolną klasę modelu w rozwiązaniu, która określa typ danych, które użytkownicy będą mogli tworzyć lub edytować:

  • Jeśli chcesz użyć programu Entity Framework Code First, możesz wybrać dowolną klasę modelu.

  • Jeśli używasz modelu Entity Framework Database First lub Entity Framework Model First, pamiętaj, aby wybrać klasę jednostki zdefiniowaną w modelu koncepcyjnym.

W przypadku klasy Kontekst danych możesz dokonać następujących wyborów:

  • Jeśli chcesz użyć funkcji Code First i nie masz istniejącej klasy kontekstu danych, wybierz pozycję **Nowy kontekst danych **. Następnie zostanie wygenerowana klasa kontekstu danych.
  • Jeśli chcesz użyć funkcji Code First i masz istniejącą klasę kontekstu danych, wybierz ją tutaj. Zostanie ona zaktualizowana, aby utrwała wybraną klasę modelu.
  • Jeśli używasz najpierw bazy danych lub modelu, wybierz tutaj klasę kontekstu obiektu.

W obszarze Widoki wybierz aparat widoków, którego chcesz użyć, lub wybierz pozycję Brak, jeśli nie chcesz utworzyć szkieletu żadnych widoków.

Możesz wybrać pozycję Opcje zaawansowane, aby określić dalsze opcje dla wygenerowanych widoków. Można na przykład wybrać układ lub stronę wzorcową do użycia.

Ulepszenia okna dialogowego "nowy projekt ASP.NET MVC 3"

Okno dialogowe używane do tworzenia nowych projektów MVC 3 ASP.NET zawiera wiele ulepszeń, jak pokazano poniżej.

Zrzut ekranu przedstawiający okno dialogowe nowego projektu. Ikona Aplikacja intranetowa i pole wyboru Użyj semantycznego narzutu H T M L 5 są wyróżnione.

Nowy szablon "Projekt intranetowy"

Lista Szablon projektu zawiera nowy szablon aplikacji intranetowej. Ten szablon zawiera ustawienia do tworzenia aplikacji internetowej przy użyciu uwierzytelniania systemu Windows zamiast uwierzytelniania formularzy. Ponieważ aplikacja intranetowa wymaga niektórych ustawień usług IIS, których nie można hermetyzować w szablonie projektu, szablon zawiera plik readme z instrukcjami dotyczącymi sposobu działania szablonu projektu w usługach IIS. Dokumentacja nowego szablonu aplikacji intranetowej jest dostępna w witrynie sieci Web MSDN pod następującym adresem URL:

https://msdn.microsoft.com/library/gg703322(VS.98).aspx

Szablony projektów są teraz włączone w języku HTML5

Okno dialogowe nowy projekt zawiera teraz opcję dodawania funkcji specyficznych dla języka HTML5 do szablonów projektów. Wybranie opcji powoduje wygenerowanie widoków zawierających nowy kod HTML5 <header>, <footer>i <navigation> elementy.

Należy pamiętać, że wcześniejsze wersje przeglądarek nie obsługują tagów specyficznych dla języka HTML5. Aby rozwiązać ten problem, szablony projektów HTML5 zawierają odwołanie do biblioteki modernizatora. (Zobacz następną sekcję).

Szablony projektów obejmują teraz modernizator 1.7

Modernizator to biblioteka Języka JavaScript, która umożliwia obsługę arkuszy CSS 3 i HTML5 w przeglądarkach, które jeszcze nie obsługują tych funkcji. Ta biblioteka jest dołączona jako wstępnie zainstalowany pakiet NuGet w szablonach dla projektów ASP.NET MVC 3. Aby uzyskać więcej informacji na temat modernizatora, zobacz http://www.modernizr.com/.

Szablony projektów obejmują zaktualizowane wersje interfejsu użytkownika jQuery, jQuery i weryfikacji jQuery

Szablony projektów zawierają teraz następujące wersje skryptów jQuery:

  • jQuery 1.5.1
  • jQuery Validation 1.8
  • Interfejs użytkownika jQuery 1.8.11

Te biblioteki są dołączane jako wstępnie zainstalowane pakiety NuGet.

Szablony projektów zawierają teraz ADO.NET Entity Framework 4.1 jako wstępnie zainstalowany pakiet NuGet

ADO.NET Entity Framework 4.1 zawiera funkcję Code First. Code First to nowy wzorzec programowania dla platformy Entity Framework ADO.NET, który stanowi alternatywę dla istniejących wzorców Database First i Model First.

Code First koncentruje się na definiowaniu modelu przy użyciu klas POCO ("zwykłych starych obiektów CLR") napisanych w języku Visual Basic lub C#. Te klasy można następnie zamapować na istniejącą bazę danych lub użyć do wygenerowania schematu bazy danych. Dodatkową konfigurację można dostarczyć przy użyciu atrybutów DataAnnotations lub płynnych interfejsów API.

Dokumentacja dotycząca korzystania z aplikacji Code Firstwith ASP.NET MVC jest dostępna w witrynie internetowej ASP.NET pod następującymi adresami URL:

https://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs https://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

Szablony projektów zawierają biblioteki Języka JavaScript jako wstępnie zainstalowane pakiety NuGet

Podczas tworzenia nowego projektu ASP.NET MVC 3 projekt zawiera wymienione wcześniej pliki JavaScript (na przykład bibliotekę modernizatora), instalując je przy użyciu narzędzia NuGet zamiast bezpośredniego dodawania skryptów do folderu Scripts w zawartości szablonu projektu. Dzięki temu można użyć narzędzia NuGet do zaktualizowania skryptów do najnowszej wersji po wydaniu nowych wersji skryptów.

Na przykład ze względu na częstotliwość nowych wydań jQuery wersja zestawu jQuery zawarta w szablonie projektu będzie w pewnym momencie nieaktualna. Jednak ze względu na to, że pakiet jQuery jest dołączony jako zainstalowany pakiet NuGet, otrzymasz powiadomienie w oknie dialogowym NuGet, gdy dostępne są nowsze wersje pakietu jQuery.

Ponieważ zapytanie jQuery zawiera numer wersji w nazwie pliku, aktualizowanie zapytania jQuery do najnowszej wersji wymaga również zaktualizowania tagu <script> , który odwołuje się do pliku jQuery w celu użycia nowej nazwy pliku. Inne dołączone biblioteki skryptów nie zawierają numeru wersji w nazwie skryptu, dzięki czemu można je łatwiej aktualizować do najnowszych wersji.

Znane problemy w usłudze ASP.NET MVC 3

  • W niektórych przypadkach instalacja może zakończyć się niepowodzeniem z komunikatem o błędzie "Instalacja nie powiodła się z kodem błędu (0x80070643)". Aby uzyskać informacje na temat sposobu obejścia tego problemu, zobacz artykuł knowledgebase 2531566.
  • Tworzenie szkieletu na potrzeby dodawania kontrolera nie powoduje tworzenia szkieletu jednostek korzystających z obsługi dziedziczenia jednostek w programie Entity Framework. Na przykład, biorąc pod uwagę klasę podstawową Person , która jest dziedziczona przez klasę Student , szkielet klasy Student spowoduje wygenerowanie kodu, który nie zostanie skompilowany.
  • Utworzenie nowego projektu ASP.NET MVC 3 w folderze rozwiązania powoduje błąd NullReferenceException . Obejście polega na utworzeniu projektu ASP.NET MVC 3 w katalogu głównym rozwiązania, a następnie przeniesieniu go do folderu rozwiązania.
  • Funkcja IntelliSense dla składni Razor nie działa po zainstalowaniu narzędzia ReSharper. Jeśli masz zainstalowany program ReSharper i chcesz skorzystać z obsługi funkcji Razor IntelliSense w ASP.NET MVC 3, zobacz wpis Razor Intellisense i ReSharper na blogu hadi Hariri, który omawia sposoby ich używania razem dzisiaj.
  • Podczas instalacji okno dialogowe akceptacji umowy EULA wyświetla postanowienia licencyjne w oknie, które jest mniejsze niż zamierzone.
  • Podczas edytowania widoku Razor (cshtml lub .plik vbhtml ), widoki. ASP.NET MVC 3 nie zawiera żadnych fragmentów kodu dla widoków Razor. aspxselecting a code snippet for ASP.NET MVC will show snippets for (Aspxselecting a code snippet for ASP.NET MVC will show snippets for (Aspxselecting a code fragmentippet for ASP.NET MVC will show snippets for
  • Jeśli zainstalujesz ASP.NET MVC 3 for Visual Web Developer Express na komputerze, na którym nie zainstalowano programu Visual Studio, a następnie zainstaluj program Visual Studio, musisz ponownie zainstalować ASP.NET MVC 3. Programy Visual Studio i Visual Web Developer Express współużytkują składniki, które są uaktualniane przez instalatora ASP.NET MVC 3. Ten sam problem dotyczy instalacji ASP.NET MVC 3 dla programu Visual Studio na komputerze, który nie ma programu Visual Web Developer Express, a następnie zainstaluj program Visual Web Developer Express.

Zmiany w ASP.NET MVC 3 RTM

W tej sekcji opisano zmiany i poprawki błędów wprowadzone w wersji ASP.NET MVC 3 RTM od wersji RC2.

Zmiana: zaktualizowano wersję interfejsu użytkownika jQuery do wersji 1.8.7

Szablony projektów MVC ASP.NET dla programu Visual Studio zostały zaktualizowane w celu uwzględnienia najnowszej wersji biblioteki interfejsu użytkownika jQuery. Szablony obejmują również minimalny zestaw plików zasobów wymaganych przez interfejs użytkownika jQuery, takich jak skojarzone pliki CSS i obrazów.

Zmień: zmieniono domyślny element ModelMetadataProvider z powrotem na DataAnnotationsModelMetadataProvider

Wersja RC2 ASP.NET MVC 3 wprowadziła klasę CachedDataAnnotationsMetadataProvider , która zapewniała buforowanie na podstawie istniejącej klasy DataAnnotationsModelMetadataProvider jako poprawa wydajności. Jednak niektóre usterki zostały zgłoszone w tej implementacji, więc zmiana została przywrócona i przeniesiona do projektu MVC Futures, który jest dostępny w ASP.NET WebStack.

Naprawiono: Wklejanie części wyrażenia Razor zawierającego białe znaki powoduje jego odwrócenie

W wersjach wstępnych ASP.NET MVC 3 podczas wklejania części wyrażenia Razor zawierającego białe znaki do pliku Razor wyrażenie wynikowe jest odwrócone. Rozważmy na przykład następujący blok kodu Razor:

@SomeMethod("first param",
100)
@AnotherMethod()

Jeśli w pierwszej metodzie wybierzesz tekst "first param" i wklejesz go jako argument do drugiej metody, wynik będzie następujący:

@AnotherMethod(param""first)

Poprawne zachowanie polega na tym, że operacja wklejania powinna spowodować wykonanie następujących czynności:

@AnotherMethod("first param")

Ten problem został rozwiązany w wydaniu RTM, aby wyrażenie zostało poprawnie zachowane podczas operacji wklejania.

Naprawiono: Zmiana nazwy pliku Razor otwartego w edytorze powoduje wyłączenie kolorowania składni i funkcji IntelliSense

Zmiana nazwy pliku Razor przy użyciu Eksplorator rozwiązań podczas otwierania pliku w oknie edytora powoduje wyróżnianie składni i funkcję IntelliSense, aby przestać działać dla tego pliku. Rozwiązano ten problem, dzięki czemu wyróżnianie i funkcja IntelliSense są zachowywane po zmianie nazwy.

Znane problemy dotyczące ASP.NET MVC 3 RTM

  • Jeśli zamkniesz program Visual Studio 2010 SP1 Beta, gdy konsola menedżera pakietów NuGet jest otwarta, program Visual Studio ulegnie awarii i spróbuje ponownie uruchomić. Zostanie to naprawione w wersji RTM programu Visual Studio 2010 SP1.
  • Instalator ASP.NET MVC 3 może zainstalować tylko początkową wersję menedżera pakietów NuGet. Po zainstalowaniu wersji początkowej program NuGet można zainstalować i zaktualizować przy użyciu menedżera rozszerzeń programu Visual Studio. Jeśli masz już zainstalowany pakiet NuGet, przejdź do galerii rozszerzeń programu Visual Studio, aby zaktualizować ją do najnowszej wersji narzędzia NuGet.
  • Utworzenie nowego projektu ASP.NET MVC 3 w folderze rozwiązania powoduje błąd NullReferenceException . Obejście polega na utworzeniu projektu ASP.NET MVC 3 w katalogu głównym rozwiązania, a następnie przeniesieniu go do folderu rozwiązania.
  • Wykonanie instalatora może trwać znacznie dłużej niż poprzednie wersje ASP.NET MVC. Dzieje się tak, ponieważ aktualizuje składniki programu Visual Studio 2010.
  • Funkcja IntelliSense dla składni Razor nie działa po zainstalowaniu narzędzia ReSharper. Jeśli masz zainstalowany program ReSharper i chcesz skorzystać z obsługi funkcji Razor IntelliSense w ASP.NET MVC 3, zobacz wpis Razor Intellisense i ReSharper na blogu hadi Hariri, który omawia sposoby ich używania razem dzisiaj.
  • Widoki CCSHTML i VBHTML utworzone przy użyciu wersji Beta ASP.NET MVC 3 nie mają poprawnie ustawionej akcji kompilacji, co powoduje pominięcie tych typów widoków po opublikowaniu projektu. Wartość Akcja kompilacji dla tych plików powinna być ustawiona na wartość "Zawartość". ASP.NET MVC 3 RTM rozwiązuje ten problem dla nowych plików, ale nie poprawia ustawienia istniejących plików dla projektu utworzonego z wersjami wstępnymi.
  • Zrzut ekranu przedstawiający okno dialogowe właściwości z otwartym menu akcji kompilacji. Wybrano opcję zawartości.
  • Podczas instalacji okno dialogowe akceptacji umowy EULA wyświetla postanowienia licencyjne w oknie, które jest mniejsze niż zamierzone.
  • Podczas edytowania widoku Razor (pliku cshtml) element menu Przejdź do kontrolera w programie Visual Studio nie będzie dostępny i nie ma żadnych fragmentów kodu.
  • Jeśli zainstalujesz ASP.NET MVC 3 for Visual Web Developer Express na komputerze, na którym nie zainstalowano programu Visual Studio, a następnie zainstaluj program Visual Studio, musisz ponownie zainstalować ASP.NET MVC 3. Programy Visual Studio i Visual Web Developer Express współużytkują składniki, które są uaktualniane przez instalatora ASP.NET MVC 3. Ten sam problem dotyczy instalacji ASP.NET MVC 3 dla programu Visual Studio na komputerze, który nie ma programu Visual Web Developer Express, a następnie zainstaluj program Visual Web Developer Express.

Istotne zmiany w ASP.NET MVC 3

  • W poprzednich wersjach ASP.NET MVC filtry akcji są tworzone na żądanie, z wyjątkiem kilku przypadków. To zachowanie nigdy nie było gwarantowanym zachowaniem, ale tylko szczegółem implementacji, a kontraktem dla filtrów było rozważenie ich bezstanowych. W ASP.NET MVC 3 filtry są buforowane bardziej agresywnie. W związku z tym wszystkie filtry akcji niestandardowych, które nieprawidłowo przechowują stan wystąpienia, mogą zostać uszkodzone.
  • Kolejność wykonywania filtrów wyjątków została zmieniona dla filtrów wyjątków, które mają tę samą wartość Order . W ASP.NET MVC 2 i starszych filtrów wyjątków na kontrolerze, które mają taką samą wartość Order jak w metodzie akcji, są wykonywane przed filtrami wyjątków dla metody akcji. Zazwyczaj jest to przypadek, gdy filtry wyjątków są stosowane bez określonej wartości Zamówienia . W ASP.NET MVC 3 ta kolejność została cofniętą, tak aby najbardziej konkretna procedura obsługi wyjątków była wykonywana jako pierwsza. Podobnie jak we wcześniejszych wersjach, jeśli właściwość Order jest jawnie określona, filtry są uruchamiane w określonej kolejności.
  • Dodano nową właściwość o nazwie FileExtensions do klasy bazowej VirtualPathProviderViewEngine . Gdy ASP.NET wyszukuje widok według ścieżki (nie według nazwy), uwzględniane są tylko widoki z rozszerzeniem pliku znajdującym się na liście określonej przez tę nową właściwość. Jest to istotna zmiana w aplikacjach, w których niestandardowy dostawca kompilacji jest zarejestrowany w celu włączenia niestandardowego rozszerzenia pliku dla widoków formularzy sieci Web i gdzie dostawca odwołuje się do tych widoków przy użyciu pełnej ścieżki, a nie nazwy. Obejście polega na zmodyfikowaniu wartości właściwości FileExtensions w celu uwzględnienia niestandardowego rozszerzenia pliku.
  • Implementacje fabryki kontrolera niestandardowego, które bezpośrednio implementują interfejs IControllerFactory , muszą zapewnić implementację nowej metody GetControllerSessionBehavior , która została dodana do interfejsu w tej wersji. Ogólnie rzecz biorąc, zaleca się, aby nie implementować tego interfejsu bezpośrednio i zamiast tego wyprowadzić klasę z DefaultControllerFactory.

Zmiany w ASP.NET MVC 3 RC2

W tej sekcji opisano zmiany (nowe funkcje i poprawki błędów) wprowadzone w wersji ASP.NET MVC 3 RC2 od wersji RC2.

Szablony projektów zmieniły się tak, aby zawierały jQuery 1.4.4, jQuery Validation 1.7 i jQuery UI 1.8.6

Szablony projektów dla ASP.NET MVC 3 zawierają teraz najnowsze wersje jQuery, jQuery Validation i jQuery UI. Interfejs użytkownika jQuery to nowy dodatek do szablonów projektów i udostępnia przydatne widżety interfejsu użytkownika. Aby uzyskać więcej informacji na temat interfejsu użytkownika jQuery, odwiedź stronę główną: http://jqueryui.com/.

Dodano klasę "AdditionalMetadataAttribute"

Możesz użyć klasy AdditionalMetadataAttribute , aby wypełnić słownik ModelMetadata.AdditionalValues dla właściwości modelu.

Załóżmy na przykład, że model widoku ma właściwości, które powinny być wyświetlane tylko administratorowi. Ten model można oznaczyć adnotacją przy użyciu nowego atrybutu, używając parametru AdminOnly jako klucza i wartości true, jak w poniższym przykładzie:

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

Te metadane są udostępniane wszystkim szablonom wyświetlania lub edytora podczas renderowania modelu widoku produktu. Deweloper aplikacji musi interpretować informacje o metadanych.

Ulepszone tworzenie szkieletu widoku

Szablony T4 używane do tworzenia szkieletów widoków generują teraz wywołania metod pomocnika szablonu, takich jak EditorFor zamiast pomocników, takich jak TextBoxFor. Ta zmiana zwiększa obsługę metadanych w modelu w postaci atrybutów adnotacji danych, gdy w oknie dialogowym Dodawanie widoku jest generowany widok.

Tworzenie szkieletu Dodaj widok obejmuje również ulepszone wykrywanie i użycie informacji o kluczu podstawowym w modelu na podstawie konwencji. Na przykład okno dialogowe Dodawanie widoku używa tych informacji, aby upewnić się, że wartość klucza podstawowego nie jest utworzona szkieletem jako pola formularza edytowalnego.

Domyślne szablony Edytowanie i tworzenie zawierają odwołania do skryptów jQuery wymaganych do weryfikacji klienta.

Dodano metodę Html.Raw

Domyślnie aparat widoku Razor koduje wszystkie wartości. Na przykład poniższy fragment kodu koduje kod HTML wewnątrz zmiennej powitania, tak aby był wyświetlany na stronie jako <strong>Hello World!</strong>.

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@greeting</p>

Nowa metoda Html.Raw zapewnia prosty sposób wyświetlania niezakodowanego kodu HTML, gdy zawartość jest znana jako bezpieczna. Poniższy przykład wyświetla ten sam ciąg, ale ciąg jest renderowany jako znaczniki:

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@Html.Raw(greeting)</p>

Zmieniono nazwę właściwości "Controller.ViewModel" i właściwości "View" na "ViewBag"

Wcześniej właściwość ViewModelkontrolera odpowiadała właściwości View widoku. Obie te właściwości umożliwiają dostęp do wartości obiektu ViewDataDictionary przy użyciu dynamicznej składni dostępu właściwości. Nazwa obu właściwości została zmieniona na taką samą, aby uniknąć nieporozumień i być bardziej spójne.

Zmieniono nazwę klasy "ControllerSessionStateAttribute" na "SessionStateAttribute"

Klasa ControllerSessionStateAttribute została wprowadzona w wersji RC ASP.NET MVC 3. Nazwa właściwości została zmieniona na bardziej zwięzłą.

Zmieniono nazwę właściwości RemoteAttribute "Fields" na "AdditionalFields"

Właściwość Fields klasy RemoteAttribute spowodowała pewne zamieszanie wśród użytkowników. Zmiana nazwy tej właściwości na AdditionalFields wyjaśnia jej intencję.

Zmieniono nazwę elementu "SkipRequestValidationAttribute" na "AllowHtmlAttribute"

Zmieniono nazwę atrybutu SkipRequestValidationAttribute na AllowHtmlAttribute , aby lepiej reprezentować zamierzone użycie.

Zmieniono metodę "Html.ValidationMessage", aby wyświetlić pierwszy przydatny komunikat o błędzie

Naprawiono metodę Html.ValidationMessage , aby wyświetlić pierwszy przydatny komunikat o błędzie zamiast po prostu wyświetlać pierwszy błąd.

Podczas tworzenia powiązania modelu słownik ModelState można wypełnić z wielu źródeł z komunikatami o błędach dotyczącymi właściwości, w tym z samego modelu (jeśli implementuje IValidatableObject), z atrybutów walidacji zastosowanych do właściwości oraz z wyjątków zgłaszanych podczas uzyskiwania dostępu do właściwości.

Gdy metoda Html.ValidationMessage wyświetla komunikat weryfikacji, pomija wpisy stanu modelu, które zawierają wyjątek, ponieważ zazwyczaj nie są one przeznaczone dla użytkownika końcowego. Zamiast tego metoda szuka pierwszego komunikatu sprawdzania poprawności, który nie jest skojarzony z wyjątkiem i wyświetla ten komunikat. Jeśli taki komunikat nie zostanie znaleziony, domyślnie zostanie wyświetlony ogólny komunikat o błędzie skojarzony z pierwszym wyjątkiem.

Naprawiono @model deklarację, aby nie dodawać białych znaków do dokumentu

We wcześniejszych wersjach @model deklaracja w górnej części widoku dodała pusty wiersz do renderowanych danych wyjściowych HTML. Zostało to naprawione tak, aby deklaracja nie wprowadzała białych znaków.

Dodano właściwość "FileExtensions" do wyświetlania aparatów w celu obsługi nazw plików Engine-Specific

Aparat widoku może zwrócić widok przy użyciu jawnej ścieżki widoku, jak w poniższym przykładzie:

return View("~/views/home/index.cshtml");

Pierwszy aparat wyświetlania zawsze próbuje renderować widok. Domyślnie aparat widoku Web Forms jest pierwszym aparatem widoku, ponieważ aparat Web Forms nie może renderować widoku Razor, występuje błąd. Aparaty widoków mają teraz właściwość FileExtensions , która służy do określania, które rozszerzenia plików obsługują. Ta właściwość jest sprawdzana, gdy ASP.NET określa, czy aparat wyświetlania może renderować plik. Jest to zmiana powodująca niezgodność, a więcej szczegółów znajduje się w sekcji Zmiany powodujące niezgodność w tym dokumencie.

Naprawiono pomocnik "LabelFor", aby emitować poprawną wartość atrybutu "For"

Usunięto usterkę polegającą na tym, że metoda LabelFor renderowała atrybut for zgodny z atrybutem name elementu wejściowego zamiast jego identyfikatora. Zgodnie z W3C atrybut for powinien być zgodny z identyfikatorem elementu wejściowego .

Naprawiono metodę "RenderAction", aby nadać jawne wartości pierwszeństwo podczas wiązania modelu

We wcześniejszych wersjach jawne wartości, które zostały przekazane do metody RenderAction , były ignorowane na rzecz bieżących wartości formularza podczas tworzenia powiązania modelu wewnątrz akcji podrzędnej. Poprawka gwarantuje, że jawne wartości mają pierwszeństwo podczas tworzenia powiązania modelu.

Istotne zmiany w ASP.NET MVC 3 RC2

  • W poprzednich wersjach ASP.NET MVC filtry akcji zostały utworzone na żądanie, z wyjątkiem kilku przypadków. To zachowanie nigdy nie było gwarantowanym zachowaniem, ale tylko szczegółem implementacji, a kontraktem dla filtrów było rozważenie ich bezstanowych. W ASP.NET MVC 3 filtry są buforowane bardziej agresywnie. W związku z tym wszystkie filtry akcji niestandardowych, które nieprawidłowo przechowują stan wystąpienia, mogą zostać uszkodzone.
  • Kolejność wykonywania filtrów wyjątków została zmieniona dla filtrów wyjątków, które mają tę samą wartość Order . W ASP.NET MVC 2 i starszych filtrów wyjątków na kontrolerze, który miał taką samą wartość Order jak w metodzie akcji, zostały wykonane przed filtrami wyjątków dla metody akcji. Zazwyczaj jest to przypadek, gdy filtry wyjątków zostały zastosowane bez określonej wartości Zamówienia . W ASP.NET MVC 3 ta kolejność została cofniętą, tak aby najbardziej konkretna procedura obsługi wyjątków była wykonywana jako pierwsza. Podobnie jak we wcześniejszych wersjach, jeśli właściwość Order jest jawnie określona, filtry są uruchamiane w określonej kolejności.
  • Dodano nową właściwość o nazwie FileExtensions do klasy bazowej VirtualPathProviderViewEngine . Gdy ASP.NET wyszukuje widok według ścieżki (nie według nazwy), uwzględniane są tylko widoki z rozszerzeniem pliku znajdującym się na liście określonej przez tę nową właściwość. Jest to istotna zmiana w aplikacjach, w których niestandardowy dostawca kompilacji jest zarejestrowany w celu włączenia niestandardowego rozszerzenia pliku dla widoków formularzy sieci Web i gdzie dostawca odwołuje się do tych widoków przy użyciu pełnej ścieżki, a nie nazwy. Obejście polega na zmodyfikowaniu wartości właściwości FileExtensions w celu uwzględnienia niestandardowego rozszerzenia pliku.
  • Implementacje fabryki kontrolera niestandardowego, które bezpośrednio implementują interfejs IControllerFactory , muszą zapewnić implementację nowej metody GetControllerSessionBehavior , która została dodana do interfejsu w tej wersji. Ogólnie rzecz biorąc, zaleca się, aby nie implementować tego interfejsu bezpośrednio i zamiast tego wyprowadzić klasę z DefaultControllerFactory.

Znane problemy w ASP.NET MVC 3 RC2

  • Instalator ASP.NET MVC 3 może zainstalować tylko początkową wersję menedżera pakietów NuGet. Po zainstalowaniu wersji początkowej program NuGet można zainstalować i zaktualizować przy użyciu menedżera rozszerzeń programu Visual Studio. Jeśli masz już zainstalowany pakiet NuGet, przejdź do galerii rozszerzeń programu Visual Studio, aby zaktualizować ją do najnowszej wersji narzędzia NuGet.
  • Utworzenie nowego projektu ASP.NET MVC 3 w folderze rozwiązania powoduje błąd NullReferenceException . Obejście polega na utworzeniu projektu ASP.NET MVC 3 w katalogu głównym rozwiązania, a następnie przeniesieniu go do folderu rozwiązania.
  • Wykonanie instalatora może trwać znacznie dłużej niż poprzednie wersje ASP.NET MVC. Dzieje się tak, ponieważ aktualizuje składniki programu Visual Studio 2010.
  • Funkcja IntelliSense dla składni Razor nie działa po zainstalowaniu narzędzia ReSharper. Jeśli masz zainstalowaną usługę ReSharper i chcesz korzystać z obsługi funkcji Razor IntelliSense w ASP.NET MVC 3 RC2, zobacz wpis Razor Intellisense i ReSharper na blogu usługi Hadi Hariri, który omawia sposoby ich używania razem dzisiaj.
  • Widoki CSHTML i VBHTML utworzone przy użyciu wersji beta ASP.NET MVC 3 nie mają poprawnie ustawionej akcji kompilacji, co powoduje pominięcie tych typów widoków po opublikowaniu projektu. Wartość Akcja kompilacji dla tych plików powinna być ustawiona na Zawartość. ASP.NET MVC 3 RC2 rozwiązuje ten problem dla nowych plików, ale nie poprawia ustawienia istniejących plików dla projektu utworzonego przy użyciu wersji beta. Zrzut ekranu przedstawiający okno dialogowe właściwości. Menu akcji kompilacji jest otwarte i wybrano opcję zawartości.
  • Podczas instalacji okno dialogowe akceptacji umowy EULA wyświetla postanowienia licencyjne w oknie, które jest mniejsze niż zamierzone.
  • Podczas edytowania widoku Razor (pliku cshtml) element menu Przejdź do kontrolera w programie Visual Studio nie będzie dostępny i nie ma żadnych fragmentów kodu.
  • Jeśli zainstalujesz ASP.NET MVC 3 for Visual Web Developer Express na komputerze, na którym nie zainstalowano programu Visual Studio, a następnie zainstaluj program Visual Studio, musisz ponownie zainstalować ASP.NET MVC 3. Programy Visual Studio i Visual Web Developer Express współużytkują składniki, które są uaktualniane przez instalatora ASP.NET MVC 3. Ten sam problem dotyczy instalacji ASP.NET MVC 3 dla programu Visual Studio na komputerze, który nie ma programu Visual Web Developer Express, a następnie zainstaluj program Visual Web Developer Express.
  • Zainstalowanie ASP.NET MVC 3 RC 2 nie powoduje zaktualizowania narzędzia NuGet, jeśli jest już zainstalowany. Aby uaktualnić pakiet NuGet, przejdź do menedżera rozszerzeń programu Visual Studio i powinien zostać wyświetlony jako dostępna aktualizacja. Możesz uaktualnić pakiet NuGet do najnowszej wersji stamtąd.

ASP.NET MVC 3 Release Candidate

ASP.NET MVC Release Candidate został wydany 9 listopada 2010 r.

Nowe funkcje w ASP.NET MVC 3 RC

W tej sekcji opisano funkcje wprowadzone w wersji ASP.NET MVC 3 RC od wersji beta.

Menedżer pakietów NuGet

ASP.NET MVC 3 zawiera Menedżera pakietów NuGet (wcześniej znanego jako NuPack), który jest zintegrowanym narzędziem do zarządzania pakietami służącą do dodawania bibliotek i narzędzi do projektów programu Visual Studio. To narzędzie automatyzuje kroki wykonywane przez deweloperów w celu pobrania biblioteki do drzewa źródłowego.

Możesz pracować z narzędziem NuGet jako narzędziem wiersza polecenia, jako zintegrowanym oknem konsoli w programie Visual Studio 2010, z menu kontekstowego programu Visual Studio i jako zestaw poleceń cmdlet programu PowerShell.

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

Ulepszone okno dialogowe "Nowy projekt"

Po utworzeniu nowego projektu okno dialogowe Nowy projekt umożliwia teraz określenie aparatu wyświetlania oraz ASP.NET typu projektu MVC.

Zrzut ekranu przedstawiający okno dialogowe nowego projektu. Menu aparatu wyświetlania jest otwarte i wybrano razor.

Obsługa modyfikowania listy szablonów i aparatów wyświetlania wymienionych w oknie dialogowym jest zawarta w tej wersji.

Szablony domyślne są następujące:

Pusty. Zawiera minimalny zestaw plików dla projektu ASP.NET MVC, w tym domyślną strukturę katalogów dla projektów ASP.NET MVC, plik Site.css zawierający domyślne style MVC ASP.NET oraz katalog Scripts zawierający domyślne pliki JavaScript.

Aplikacja internetowa. Zawiera przykładowe funkcje, które pokazują, jak używać dostawcy członkostwa z ASP.NET MVC.

Lista szablonów projektów wyświetlanych w oknie dialogowym jest określona w rejestrze systemu Windows.

Kontrolery bez sesji

Nowy kontrolerSessionStateAttribute zapewnia większą kontrolę nad zachowaniem stanu sesji dla kontrolerów, określając wartość wyliczenia System.Web.SessionState.SessionStateBehavior .

W poniższym przykładzie pokazano, jak wyłączyć stan sesji dla wszystkich żądań do kontrolera.

[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
    public ActionResult Index() {
        object o = Session["Key"]; // Causes an exception.

    }
}

W poniższym przykładzie pokazano, jak ustawić stan sesji tylko do odczytu dla wszystkich żądań do kontrolera.

[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
    public ActionResult Index() {
    Session["Key"] = "value"; // Value is not available in
    the next request
    }
}

Nowe atrybuty walidacji

CompareAttribute

Nowy atrybut weryfikacji CompareAttribute umożliwia porównanie wartości dwóch różnych właściwości modelu. W poniższym przykładzie właściwość ComparePassword musi być zgodna z polem Hasło , aby było prawidłowe.

public class User {
    [Required]

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

RemoteAttribute

Nowy atrybut weryfikacji RemoteAttribute korzysta z zdalnego modułu sprawdzania poprawności jQuery Validation, który umożliwia weryfikację po stronie klienta wywołanie metody na serwerze, który wykonuje rzeczywistą logikę walidacji.

W poniższym przykładzie właściwość UserName ma zastosowany atrybut RemoteAttribute . Podczas edytowania tej właściwości w widoku Edycji walidacja klienta wywoła akcję o nazwie UserNameAvailable w klasie UsersController w celu zweryfikowania tego pola.

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";
    }
}

Domyślnie nazwa właściwości, do którego jest stosowany atrybut, jest wysyłana do metody akcji jako parametr ciągu zapytania.

Nowe przeciążenia metod "LabelFor" i "LabelForModel"

Dodano nowe przeciążenia dla metod LabelFor i LabelForModel , które umożliwiają określenie tekstu etykiety. W poniższym przykładzie pokazano, jak używać tych przeciążeń.

@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");

Buforowanie danych wyjściowych akcji podrzędnych

Element OutputCacheAttribute obsługuje buforowanie danych wyjściowych akcji podrzędnych, które są wywoływane przy użyciu metod pomocnika Html.RenderAction lub Html.Action. W poniższym przykładzie pokazano widok, który wywołuje inną akcję.

Hi there. The uncached time is:
@DateTime.Now
The cached time is: @Html.Action("GetDate")

Akcja GetDate jest oznaczona adnotacją z atrybutem OutputCacheAttribute:

[OutputCache(Duration = 100,
VaryByParam = "none")]
public string GetDate() {
    return DateTime.Now.ToString();
}

Po uruchomieniu tego kodu wynik wywołania metody Html.Action("GetDate") jest buforowany przez 100 sekund.

Ulepszenia okna dialogowego "Dodawanie widoku"

Po dodaniu silnie typizowanego widoku okno dialogowe Dodawanie widoku odfiltruje teraz więcej typów, które nie mają zastosowania niż w poprzednich wersjach, takich jak wiele podstawowych typów .NET Framework. Ponadto lista jest teraz sortowana według nazwy klasy, a nie przez w pełni kwalifikowaną nazwę typu, co ułatwia znajdowanie typów. Na przykład nazwa typu jest teraz wyświetlana tak, jak w poniższym przykładzie:

ClassName (przestrzeń nazw)

We wcześniejszych wersjach ta funkcja byłaby wyświetlana jako następująca:

Namespace.ClassName

Szczegółowa walidacja żądań

Właściwość Exclude elementu ValidateInputAttribute już nie istnieje. Zamiast tego aby żądanie zostało pominięte dla określonych właściwości modelu podczas tworzenia powiązania modelu, użyj nowego atrybutu SkipRequestValidationAttribute.

Załóżmy na przykład, że metoda akcji służy do edytowania wpisu w blogu:

[HttpPost]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Poniższy przykład przedstawia model wyświetlania wpisu w blogu.

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    public string Description {get; set;}
}

Gdy użytkownik prześle znaczniki dla właściwości Description, powiązanie modelu zakończy się niepowodzeniem z powodu weryfikacji żądania. Aby wyłączyć walidację żądania podczas tworzenia powiązania modelu dla wpisu w blogu Opis, zastosuj atrybut SkipRequpestValidationAttribute do właściwości, jak pokazano w tym przykładzie:

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

Alternatywnie, aby wyłączyć walidację żądania dla każdej właściwości modelu, zastosuj właściwość ValidateInputAttribute z wartością false do metody akcji:

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Istotne zmiany w ASP.NET MVC 3 RC

  • Kolejność wykonywania filtrów wyjątków została zmieniona dla filtrów wyjątków, które mają tę samą wartość Order . W ASP.NET MVC 2 i starszych filtrów wyjątków na kontrolerze, który miał taką samą kolejność jak w metodzie akcji, zostały wykonane przed filtrami wyjątków dla metody akcji. Zazwyczaj jest to przypadek, gdy filtry wyjątków zostały zastosowane bez określonej wartości Zamówienia . W ASP.NET MVC 3 ta kolejność została cofniętą, tak aby najbardziej konkretna procedura obsługi wyjątków była wykonywana jako pierwsza. Podobnie jak we wcześniejszych wersjach, jeśli właściwość Order jest jawnie określona, filtry są uruchamiane w określonej kolejności.
  • Dodano nową właściwość o nazwie FileExtensions do klasy bazowej VirtualPathProviderViewEngine . Podczas wyszukiwania widoku według ścieżki (a nie według nazwy) uwzględniane są tylko widoki z rozszerzeniem pliku znajdującym się na liście określonej przez tę nową właściwość. Jest to zmiana powodująca niezgodność dla tych, którzy rejestrują niestandardowego dostawcę kompilacji w celu włączenia niestandardowego rozszerzenia pliku dla widoków formularzy internetowych i odwołują się do tych widoków przy użyciu pełnej ścieżki, a nie nazwy. Obejście polega na zmodyfikowaniu wartości właściwości FileExtensions w celu uwzględnienia niestandardowego rozszerzenia pliku.

Znane problemy w ASP.NET MVC 3 RC

  • Wykonanie instalatora może trwać znacznie dłużej niż poprzednie wersje ASP.NET MVC, ponieważ aktualizuje składniki programu Visual Studio 2010.
  • Tworzenie szkieletu Dodaj widok podczas wybierania niestronnie wpisanych szkieletów widoków tylko do zapisu. Powinny one być zawsze ignorowane przez tworzenie szkieletów. Okno dialogowe Dodawanie widoku tworzy również szkielet właściwości tylko do odczytu podczas generowania widoku "Edytuj" lub "Utwórz". Właściwości tylko do odczytu powinny być szkieletowe tylko dla widoków Wyświetlanie i wyświetlanie listy.
  • Debugowanie nie działa, gdy ASP.NET MVC 3 jest instalowany wraz z Async CTP. ASP.NET MVC 3 nie można zainstalować obok siebie z Async CTP. Odinstaluj Async CTP, aby naprawić debugowanie. Aby uzyskać więcej informacji, przeczytaj ten wpis w blogu dotyczący odinstalowywania wszystkich elementów ASP.NET MVC 3 RC.
  • Funkcja IntelliSense razor nie działa po zainstalowaniu narzędzia Resharper. Jeśli masz zainstalowaną usługę ReSharper i chcesz skorzystać z obsługi funkcji IntelliSense Razor w ASP.NET MVC 3 RC, przeczytaj ten wpis w blogu firmy JetBrains, który omawia sposoby ich używania razem dzisiaj.
  • Widoki CSHTML i VBHTML utworzone przy użyciu wersji Beta ASP.NET MVC 3 nie mają poprawnej akcji kompilacji, która pomija je podczas publikowania. Akcja kompilacji dla tych plików powinna mieć wartość "Zawartość". ASP.NET MVC 3 RC rozwiązuje ten problem dla nowych plików, ale nie poprawia ustawienia istniejących plików dla projektu utworzonego przy użyciu wersji beta.
  • Wykonanie instalatora może trwać znacznie dłużej niż poprzednie wersje ASP.NET MVC, ponieważ aktualizuje składniki programu Visual Studio 2010.
  • Tworzenie szkieletu Dodaj widok podczas wybierania silnie typizowanego szkieletu widoku "Edytuj" właściwości tylko do odczytu. Podobnie właściwości tylko do zapisu są szkieletowe dla widoków "Wyświetlanie".
  • Podczas instalacji okno dialogowe akceptacji umowy EULA wyświetla postanowienia licencyjne w oknie, które jest mniejsze niż zamierzone.
  • Zainstalowanie CTP asynchronicznego programu Visual Studio powoduje konflikt z wersją Razor, która jest uwzględniona w ramach instalacji narzędzi ASP.NET MVC 3. Upewnij się, że nie próbujesz zainstalować zarówno programu Visual Studio Async CTP, jak i wydania Razor na tej samej maszynie.
  • Podczas edytowania widoku Razor (pliku cshtml) element menu Przejdź do kontrolera w programie Visual Studio nie będzie dostępny i nie ma żadnych fragmentów kodu.

ASP.NET MVC 3 Beta

ASP.NET MVC 3 Beta został wydany 6 października 2010 r. Poniższe informacje są specyficzne dla wersji beta i podlegają aktualizacjom lub zmianom, do których odwołuje się powyższy ASP.NET MVC 3 Release Candidate.

Nowe funkcjein ASP.NET MVC 3 Beta

W tej sekcji opisano funkcje wprowadzone w wersji beta ASP.NET MVC 3.

Menedżer pakietów NuGet

ASP.NET MVC 3 zawiera Menedżera pakietów NuGet, który jest zintegrowanym narzędziem do zarządzania pakietami służącą do dodawania bibliotek i narzędzi do projektów programu Visual Studio. W większości przypadków automatyzuje kroki wykonywane przez deweloperów w celu pobrania biblioteki do drzewa źródłowego.

Możesz pracować z pakietem NuGet jako narzędziem wiersza polecenia, jako zintegrowanym oknem konsoli w programie Visual Studio 2010, z menu kontekstowego programu Visual Studio i jako zestaw poleceń cmdlet programu PowerShell.

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

Ulepszone okno dialogowe Nowy projekt

Po utworzeniu nowego projektu okno dialogowe Nowy projekt umożliwia teraz określenie aparatu wyświetlania oraz ASP.NET typu projektu MVC.

Zrzut ekranu przedstawiający okno dialogowe nowego projektu. Razor jest wybierany z menu aparatu widoku.

Obsługa modyfikowania listy szablonów i aparatów wyświetlania wymienionych w oknie dialogowym nie jest uwzględniona w tej wersji.

Szablony domyślne są następujące:

Pusty. Zawiera minimalny zestaw plików dla projektu ASP.NET MVC, w tym domyślną strukturę katalogów dla projektów ASP.NET MVC, mały plik Site.css zawierający domyślne style MVC ASP.NET oraz katalog Scripts zawierający domyślne pliki JavaScript.

Aplikacja internetowa. Zawiera przykładowe funkcje, które pokazują, jak używać dostawcy członkostwa w ASP.NET MVC.

Uproszczony sposób określania silnie typiowanych modeli w widokach Razor

Sposób określania typu modelu dla silnie typiowanych widoków Razor został uproszczony przy użyciu nowej @model dyrektywy dla widoków CSHTML i @ModelType dyrektywy dla widoków VBHTML. We wcześniejszych wersjach ASP.NET MVC należy w ten sposób określić silnie typizowany model widoków Razor:

@inherits System.Web.Mvc.WebViewPage

W tej wersji można użyć następującej składni:

@model MyModelNamespace.MyModelType

Obsługa nowych metod pomocnika stron sieci Web ASP.NET

Nowa technologia ASP.NET Web Pages zawiera zestaw metod pomocnika, które są przydatne do dodawania powszechnie używanych funkcji do widoków i kontrolerów. ASP.NET MVC 3 obsługuje używanie tych metod pomocnika w kontrolerach i widokach (jeśli jest to konieczne). Te metody są zawarte w zestawie System.Web.Helpers. W poniższej tabeli wymieniono kilka metod pomocnika ASP.NET Web Pages.

Pomocnika Opis
Wykres Renderuje wykres w widoku. Zawiera metody, takie jak Chart.ToWebImage, Chart.Save i Chart.Write.
Crypto Używa algorytmów tworzenia skrótów w celu utworzenia prawidłowo zasolonych i skrótów haseł.
WebGrid Renderuje kolekcję obiektów (zazwyczaj dane z bazy danych) jako siatkę. Obsługuje stronicowanie i sortowanie.
WebImage Renderuje obraz.
Webmail Wysyła wiadomość e-mail.

Krótki temat referencyjny zawierający listę pomocników i podstawową składnię jest dostępny w ramach dokumentacji składni języka Razor ASP.NET pod następującym adresem URL:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference

Dodatkowa obsługa wstrzykiwania zależności

Opierając się na wersji ASP.NET MVC 3 (wersja zapoznawcza 1), bieżąca wersja obejmuje dodanie obsługi dwóch nowych usług i czterech istniejących usług oraz ulepszoną obsługę rozwiązywania zależności i lokalizatora usługi Common Service.

Nowy interfejs IControllerActivator dla wystąpienia kontrolera Fine-Grained

Nowy interfejs IControllerActivator zapewnia bardziej szczegółową kontrolę nad tym, jak kontrolery są tworzone za pośrednictwem wstrzykiwania zależności. W poniższym przykładzie pokazano interfejs:

namespace System.Web.Mvc {
    using System.Web.Routing;

    public interface IControllerActivator {
        IController Create(RequestContext requestContext, Type controllerType);
    }
}

Należy to porównać z rolą fabryki kontrolerów. Fabryka kontrolerów jest implementacją interfejsu IControllerFactory, który jest odpowiedzialny zarówno za lokalizowanie typu kontrolera, jak i utworzenie wystąpienia tego typu kontrolera.

Aktywatory kontrolera są odpowiedzialne tylko za utworzenie wystąpienia wystąpienia typu kontrolera. Nie wykonują wyszukiwania typu kontrolera. Po zlokalizowaniu odpowiedniego typu kontrolera fabryki kontrolerów powinny delegować do wystąpienia IControllerActivator w celu obsługi rzeczywistego wystąpienia kontrolera.

Klasa DefaultControllerFactory ma nowy konstruktor, który akceptuje wystąpienie IControllerFactory. Dzięki temu można zastosować iniekcję zależności, aby zarządzać tym aspektem tworzenia kontrolera bez konieczności zastępowania domyślnego zachowania wyszukiwania typu kontrolera.

Interfejs IServiceLocator zastąpiony interfejsem IDependencyResolver

Na podstawie opinii społeczności wersja beta ASP.NET MVC 3 zastąpiła użycie interfejsu IServiceLocator z odchudzanym interfejsem IDependencyResolver specyficznym dla potrzeb ASP.NET MVC. W poniższym przykładzie przedstawiono nowy interfejs:

namespace System.Web.Mvc {
    using System.Collections.Generic;

    public interface IDependencyResolver {
        object GetService(Type serviceType);
        IEnumerable<object> GetServices(Type serviceType);
    }
}

W ramach tej zmiany klasa ServiceLocator została również zastąpiona klasą DependencyResolver. Rejestracja narzędzia rozpoznawania zależności jest podobna do wcześniejszych wersji ASP.NET MVC:

DependencyResolver.SetResolver(myResolver);

Implementacje tego interfejsu powinny po prostu delegować do bazowego kontenera wstrzykiwania zależności, aby zapewnić zarejestrowaną usługę dla żądanego typu.

Jeśli nie ma zarejestrowanych usług żądanego typu, ASP.NET MVC oczekuje implementacji tego interfejsu, aby zwrócić wartość null z getService i zwrócić pustą kolekcję z usługi GetServices.

Nowa klasa DependencyResolver umożliwia rejestrowanie klas implementujących nowy interfejs IDependencyResolver lub interfejs lokalizatora usługi Common Service (IServiceLocator). Aby uzyskać więcej informacji na temat lokalizatora usługi Common Service, zobacz CommonServiceLocator w witrynie GitHub.

Nowy interfejs IViewActivator dla wystąpienia strony widoku Fine-Grained

Nowy interfejs IViewPageActivator zapewnia bardziej szczegółową kontrolę nad sposobem tworzenia wystąpionych stron widoku za pośrednictwem wstrzykiwania zależności. Dotyczy to zarówno wystąpień elementu WebFormView, jak i wystąpień RazorView. W poniższym przykładzie przedstawiono nowy interfejs:

namespace System.Web.Mvc {
    public interface IViewPageActivator {
        object Create(ControllerContext controllerContext, Type type);
    }
}

Te klasy akceptują teraz argument konstruktora IViewPageActivator, który umożliwia użycie wstrzykiwania zależności w celu kontrolowania sposobu tworzenia wystąpień typów ViewPage, ViewUserControl i WebViewPage.

Obsługa nowego rozpoznawania zależności dla istniejących usług

Nowa wersja obejmuje obsługę rozpoznawania zależności dla następujących usług:

  • Dostawcy weryfikacji modelu. Klasy implementujące element ModelValidatorProvider można zarejestrować w narzędziu rozpoznawania zależności, a system będzie ich używać do obsługi weryfikacji po stronie klienta i serwera.
  • Dostawca metadanych modelu. Pojedyncza klasa, która implementuje element ModelMetadataProvider, może zostać zarejestrowana w narzędziu rozpoznawania zależności, a system użyje go do zapewnienia metadanych dla systemów tworzenia szablonów i walidacji.
  • Dostawcy wartości. Klasy implementujące element ValueProviderFactory można zarejestrować w narzędziu rozpoznawania zależności, a system będzie ich używać do tworzenia dostawców wartości używanych przez kontroler i podczas tworzenia powiązania modelu.
  • Powiązania modelu. Klasy implementujące element IModelBinderProvider można zarejestrować w narzędziu rozpoznawania zależności, a system będzie ich używać do tworzenia integratorów modelu używanych przez system powiązań modelu.

Nowa obsługa nietrudnego jQuery opartego na technologii Ajax

ASP.NET MVC zawiera metody pomocnika Ajax, takie jak:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

Te metody używają języka JavaScript do wywoływania metody akcji na serwerze, a nie przy użyciu pełnego ogłaszania zwrotnego. Ta funkcja została zaktualizowana, aby korzystać z trybu jQuery w sposób nietrudny. Zamiast natrętnie emitować skrypty klienta wbudowane, te metody pomocnicze oddzielają zachowanie od znaczników, emitując atrybuty HTML5 przy użyciu prefiksu data-ajax . Następnie zachowanie jest stosowane do znaczników przez odwołanie się do odpowiednich plików JavaScript. Upewnij się, że istnieją odwołania do następujących plików JavaScript:

  • jquery-1.4.1.js
  • jquery.unobtrusive.ajax.js

Ta funkcja jest domyślnie włączona w pliku Web.config w ASP.NET MVC 3 nowych szablonów projektów, ale jest domyślnie wyłączona dla istniejących projektów. Aby uzyskać więcej informacji, zobacz Dodano flagi dla całej aplikacji na potrzeby weryfikacji klienta i nietrudny kod JavaScript w dalszej części tego dokumentu.

Nowa obsługa niestrudzonej weryfikacji jQuery

Domyślnie ASP.NET MVC 3 Beta używa weryfikacji jQuery w sposób nietrudny w celu przeprowadzenia weryfikacji po stronie klienta. Aby włączyć nietrudną weryfikację klienta, wykonaj wywołanie podobne do następującego z poziomu widoku:

Html.EnableClientValidation();

Wymaga to, aby właściwość ViewContext.UnobtrusiveJavaScriptEnabled została ustawiona na true, co można zrobić, wykonując następujące wywołanie:

Html.EnableUnobtrusiveJavaScript();

Upewnij się również, że istnieją odwołania do następujących plików JavaScript.

  • jquery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js

Ta funkcja jest domyślnie włączona w pliku Web.config w ASP.NET MVC 3 nowych szablonów projektów, ale jest domyślnie wyłączona dla istniejących projektów. Aby uzyskać więcej informacji, zobacz New application-wide flags for client validation and unobtrusive JavaScript w dalszej części tego dokumentu.

Nowe flagi Application-Wide na potrzeby walidacji klienta i niestrudzonego języka JavaScript

Możesz włączyć lub wyłączyć walidację klienta i globalnie nietrudny kod JavaScript przy użyciu statycznych elementów członkowskich klasy HtmlHelper, jak w poniższym przykładzie:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

Domyślne szablony projektów domyślnie włączają dyskretny kod JavaScript. Możesz również włączyć lub wyłączyć te funkcje w głównym pliku Web.config aplikacji przy użyciu następujących ustawień:

<configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="true"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
        </appSettings>
    </configuration>

Ponieważ te funkcje można domyślnie włączyć, wprowadzono nowe przeciążenia klasy HtmlHelper, które umożliwiają zastąpienie ustawień domyślnych, jak pokazano w poniższych przykładach:

public void EnableClientValidation();
public void EnableClientValidation(bool enabled);
public void EnableUnobtrusiveJavaScript();
public void EnableUnobtrusiveJavaScript(bool enabled);

W celu zapewnienia zgodności z poprzednimi wersjami obie te funkcje są domyślnie wyłączone.

Nowa obsługa kodu uruchamiana przed uruchomieniem widoków

Teraz możesz umieścić plik o nazwie _viewstart.cshtml (lub _viewstart.vbhtml) w katalogu Views i dodać do niego kod, który będzie współużytkowany między wieloma widokami w tym katalogu i jego podkatalogach. Na przykład możesz umieścić następujący kod na stronie _viewstart.cshtml w folderze ~/Views:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Spowoduje to ustawienie strony układu dla każdego widoku w folderze Views i wszystkich jego podfolderach rekursywnie. Gdy widok jest renderowany, kod w pliku _viewstart.cshtml jest uruchamiany przed uruchomieniem kodu widoku. Kod _viewstart.cshtml ma zastosowanie do każdego widoku w tym folderze.

Domyślnie kod w pliku _viewstart.cshtml ma również zastosowanie do widoków w dowolnym podfolderze. Jednak poszczególne podfoldery mogą mieć własną wersję pliku _viewstart.cshtml; w takim przypadku pierwszeństwo ma wersja lokalna. Na przykład, aby uruchomić kod wspólny dla wszystkich widoków homeController, umieść plik _viewstart.cshtml w folderze ~/Views/Home.

Nowa obsługa składni Razor JĘZYKA VBHTML

Poprzednia wersja zapoznawcza mvC ASP.NET obejmowała obsługę widoków przy użyciu składni Razor opartej na języku C#. Te widoki używają rozszerzenia pliku cshtml. W ramach trwającej pracy nad obsługą razor, ASP.NET MVC 3 Beta wprowadza obsługę składni Razor w Języku Visual Basic, która używa rozszerzenia pliku vbhtml.

Aby zapoznać się z wprowadzeniem do używania składni języka Visual Basic na stronach VBHTML, zobacz samouczek pod następującym adresem URL:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic

Bardziej szczegółowa kontrola nad atrybutem ValidateInputAttribute

ASP.NET MVC zawsze zawierał klasę ValidateInputAttribute, która wywołuje podstawową infrastrukturę weryfikacji ASP.NET żądania, aby upewnić się, że przychodzące żądanie nie zawiera potencjalnie złośliwych danych wejściowych. Domyślnie walidacja danych wejściowych jest włączona. Istnieje możliwość wyłączenia weryfikacji żądania przy użyciu atrybutu ValidateInputAttribute, jak w poniższym przykładzie:

[ValidateInput(false)]
public ActionResult SomeAction() {
    return View();
}

Jednak wiele aplikacji internetowych ma pojedyncze pola formularza, które muszą zezwalać na kod HTML, a pozostałe pola nie powinny. Klasa ValidateInputAttribute umożliwia teraz określenie listy pól, które nie powinny być uwzględniane w weryfikacji żądania.

Jeśli na przykład tworzysz aparat blogu, możesz zezwolić na narzutowanie w polach Treść i Podsumowanie. Te pola mogą być reprezentowane przez dwa elementy wejściowe, z których każdy ma atrybut name odpowiadający nazwie właściwości ("Treść" i "Podsumowanie"). Aby wyłączyć walidację żądania tylko dla tych pól, określ nazwy (rozdzielone przecinkami) we właściwości Exclude klasy ValidateInput, jak w poniższym przykładzie:

[ValidateInput(true, Exclude="Body, Summary")]
public ActionResult About() {
    return View();
}

Pomocnicy konwertują podkreślenia na łączniki dla nazw atrybutów HTML określonych przy użyciu obiektów anonimowych

Metody pomocnika umożliwiają określenie par nazwa/wartość atrybutu przy użyciu obiektu anonimowego, jak w poniższym przykładzie:

Html.TextBox("Name", "Value", new {title = "Title"})

Takie podejście nie umożliwia używania łączników w nazwie atrybutu, ponieważ łącznik nie może być używany dla nazwy właściwości w ASP.NET. Łączniki są jednak ważne dla niestandardowych atrybutów HTML5; na przykład html5 używa prefiksu "data-".

Jednocześnie podkreślenia nie mogą być używane dla nazw atrybutów w kodzie HTML, ale są prawidłowe w nazwach właściwości. W związku z tym, jeśli określisz atrybuty przy użyciu obiektu anonimowego, a nazwy atrybutów zawierają podkreślenie, metody pomocnika przekonwertują podkreślenia na łączniki. Na przykład następująca składnia pomocnika używa podkreślenia:

Html.TextBox("Name", "Value", new {data_required = "true"})

Poprzedni przykład renderuje następujące znaczniki po uruchomieniu pomocnika:

<input data-required="true" id="Name" name="Name"
       type="textbox" value="Value" />

Poprawki błędów

Domyślny szablon obiektu dla pomocników szablonów EditorFor i DisplayFor obsługuje teraz kolejność określoną we właściwości DisplayAttribute.Order. (W poprzednich wersjach ustawienie Kolejność nie było używane).

Walidacja klienta obsługuje teraz walidację właściwości przesłonięć, które mają zastosowane atrybuty weryfikacji.

Element JsonValueProviderFactory jest teraz domyślnie zarejestrowany.

Zmiany powodujące niezgodność

Kolejność wykonywania filtrów wyjątków została zmieniona dla filtrów wyjątków, które mają tę samą wartość Order. W ASP.NET MVC 2 i starszych filtrów wyjątków na kontrolerze z tą samą kolejnością co w metodzie akcji zostały wykonane przed filtrami wyjątków w metodzie akcji. Zazwyczaj jest to przypadek, gdy filtry wyjątków zostały zastosowane bez określonej wartości Zamówienia. W ASP.NET MVC 3 ta kolejność została cofniętą, tak aby najbardziej konkretna procedura obsługi wyjątków była wykonywana jako pierwsza. Podobnie jak we wcześniejszych wersjach, jeśli właściwość Order jest jawnie określona, filtry są uruchamiane w określonej kolejności.

Znane problemy

Podczas instalacji okno dialogowe akceptacji umowy EULA wyświetla postanowienia licencyjne w oknie, które jest mniejsze niż zamierzone.

Widoki Razor nie obsługują funkcji IntelliSense ani wyróżniania składni. Oczekuje się, że obsługa składni Razor w programie Visual Studio zostanie uwzględniona w ramach późniejszej wersji.

Podczas edytowania widoku Razor (pliku CSHTML) element menu Przejdź do kontrolera w programie Visual Studio nie będzie dostępny i nie ma żadnych fragmentów kodu.

W przypadku używania @model składni do określenia silnie typizowanego widoku CSHTML skróty specyficzne dla języka dla typów nie są rozpoznawane. Na przykład @model funkcja int nie będzie działać, ale @model funkcja Int32 będzie działać. Obejściem tego błędu jest użycie rzeczywistej nazwy typu podczas określania typu modelu.

W przypadku używania @model składni do określenia silnie typizowanego widoku CSHTML (lub @ModelType określenia silnie typizowanego widoku VBHTML) typy dopuszczane do wartości null i deklaracje tablic nie są obsługiwane. Na przykład @model wartość int? nie jest obsługiwana. Zamiast tego użyj polecenia @model Nullable<Int32>. Ciąg składni @model [] również nie jest obsługiwany; zamiast tego użyj ciągu @model IList<string>.

Podczas uaktualniania projektu ASP.NET MVC 2 do ASP.NET MVC 3 pamiętaj, aby dodać następujący kod do sekcji appSettings w pliku Web.config:

<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>

Istnieje znany problem, który powoduje, że uwierzytelnianie formularzy zawsze przekierowuje nieuwierzytelnionych użytkowników do ~/Account/Login, ignorując ustawienie uwierzytelniania formularzy używane w Web.config. Obejście polega na dodaniu następującego ustawienia aplikacji.

<add key="autoFormsAuthentication" value="false" />

Disclaimer

© 2011 Microsoft Corporation. All rights reserved. Ten dokument jest dostarczany jako "w takim przypadku". Informacje i widoki wyrażone w tym dokumencie, w tym adresy URL i inne odwołania do witryn internetowych, mogą ulec zmianie bez powiadomienia. Użytkownik ponosi ryzyko związane z ich użyciem.

Ten dokument nie zapewnia żadnych praw do własności intelektualnej w jakimkolwiek produkcie firmy Microsoft. Możesz skopiować ten dokument i używać go do wewnętrznych celów referencyjnych.