ASP.NET poznámky k verzi MVC 3

Přehled

Tento dokument popisuje vydání ASP.NET MVC 3 RTM pro Visual Studio 2010. ASP.NET MVC je architektura pro vývoj webových aplikací, které používají model MVC (Model-View-Controller). Instalační program ASP.NET MVC 3 obsahuje následující komponenty:

  • ASP.NET součásti modulu runtime MVC 3
  • ASP.NET nástroje sady Visual Studio 2010 MVC 3
  • ASP.NET součásti běhu webových stránek
  • nástroje ASP.NET Webových stránek sady Visual Studio 2010
  • Microsoft Package Manager pro .NET (NuGet)
  • Aktualizace pro Visual Studio 2010, která umožňuje podporu syntaxe Razor. (Podrobnosti najdete v článku 2483190 znalostní báze KnowledgeBase.)

Úplnou sadu poznámek k verzi pro každou předběžnou verzi ASP.NET MVC 3 najdete na webu ASP.NET na následující adrese URL:

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

Poznámky k instalaci

Pokud chcete nainstalovat ASP.NET MVC 3 RTM pomocí Instalačního programu webové platformy (Web PI), navštivte následující stránku:

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

Případně si můžete stáhnout instalační program pro ASP.NET MVC 3 RTM pro Visual Studio 2010 z následující stránky:

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

ASP.NET MVC 3 je možné nainstalovat a spustit souběžně s ASP.NET MVC 2.

Požadavky na software

Součásti run-time ASP.NET MVC 3 vyžadují následující software:

  • .NET Framework verze 4.

    ASP.NET nástroje MVC 3 Sady Visual Studio 2010 vyžadují následující software:

  • Visual Studio 2010 nebo Visual Web Developer 2010 Express.

Dokumentace

Dokumentace k ASP.NET MVC je k dispozici na webu MSDN na následující adrese URL:

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

Kurzy a další informace o ASP.NET MVC jsou k dispozici na stránce MVC webu ASP.NET na následující adrese URL:

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

Podpora

Toto je plně podporovaná verze. Informace o získání technické podpory najdete na webu podpora Microsoftu.

Neváhejte také publikovat dotazy týkající se této verze na fóru ASP.NET MVC, kde členové komunity ASP.NET často poskytují neformální podporu:

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

Upgrade projektu ASP.NET MVC 2 na aktualizaci nástrojů ASP.NET MVC 3

ASP.NET MVC 3 je možné nainstalovat souběžně s ASP.NET MVC 2 na stejném počítači, což vám umožňuje flexibilně zvolit, kdy upgradovat aplikaci ASP.NET MVC 2 na ASP.NET MVC 3.

Pokud chcete ručně upgradovat existující aplikaci ASP.NET MVC 2 na verzi 3, postupujte takto:

  1. Na počítači vytvořte nový prázdný projekt ASP.NET MVC 3. Tento projekt bude obsahovat některé soubory, které jsou potřeba pro upgrade.

  2. Zkopírujte následující soubory z projektu ASP.NET MVC 3 do odpovídajícího umístění projektu ASP.NET MVC 2. Všechny odkazy na knihovnu jQuery budete muset aktualizovat tak, aby se zohlednil nový název souboru (jQuery-1.5.1.js):

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. Zkopírujte složku packages v kořenovém adresáři prázdného řešení projektu ASP.NET MVC 3 do kořenového adresáře vašeho řešení, který je v adresáři, ve kterém se nachází soubor .sln řešení.

  4. Pokud váš projekt ASP.NET MVC 2 obsahuje nějaké oblasti, zkopírujte soubor /Views/Web.config do složky Zobrazení každé oblasti.

  5. V obou Web.config souborech v projektu ASP.NET MVC 2 globálně vyhledejte a nahraďte ASP.NET verzi MVC. Vyhledejte následující:

    System.Web.Mvc, Version=2.0.0.0
    

    Nahraďte ho následujícím kódem:

    System.Web.Mvc, Version=3.0.0.0
    
  6. V Průzkumník řešení odstraňte odkaz na System.Web.Mvc (který odkazuje na knihovnu DLL z verze 2) a pak přidejte odkaz na System.Web.Mvc (v3.0.0.0).

  7. Přidejte odkaz na System.Web.WebPages.dll a System.Web.Helpers.dll. Tato sestavení jsou umístěna v následujících složkách:

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Sestavení
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Sestavení
  8. V Průzkumník řešení klikněte pravým tlačítkem na název projektu a vyberte Uvolnit projekt. Potom znovu klikněte pravým tlačítkem na název projektu a vyberte Upravit název_projektu.csproj.

  9. Vyhledejte element ProjectTypeGuids a nahraďte {F85E285D-A4E0-4152-9332-AB1D724D3325} {E53F8FEA-EAE0-44A6-8774-FFD645390401}.

  10. Uložte změny, klikněte pravým tlačítkem na projekt a pak vyberte Znovu načíst projekt.

  11. Do kořenového souboru Web.config aplikace přidejte do oddílu sestavení následující nastavení.

    <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. Pokud projekt odkazuje na knihovny třetích stran, které jsou zkompilovány pomocí ASP.NET MVC 2, přidejte následující zvýrazněný element bindingRedirect do souboru Web.config v kořenovém adresáři aplikace v části konfigurace :

    <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>
    

Změny v aktualizaci nástrojů ASP.NET MVC 3

Tato část popisuje změny provedené ve verzi aktualizace nástroje ASP.NET MVC 3 od vydání ASP.NET MVC 3 RTM.

Dialogové okno Přidat kontroler teď může vygenerovat řadiče se zobrazeními a kódem pro přístup k datům.

Generování uživatelského rozhraní je způsob rychlého generování kontroleru a zobrazení pro vaši aplikaci. Po vygenerování kódu ho můžete upravit tak, aby splňoval požadavky projektu.

Pokud chcete v ASP.NET MVC 3 spustit dialogové okno Přidat kontroler, klikněte pravým tlačítkem na složku Controllers v Průzkumník řešení, klikněte na Přidat a potom klikněte na Kontroler. Toto dialogové okno bylo vylepšeno, aby nabízelo další možnosti generování uživatelského rozhraní.

Snímek obrazovky s dialogovým oknem Přidat kontroler

Ve výchozím nastavení jsou k dispozici tři šablony generování.

Prázdný kontroler

Tato šablona vygeneruje prázdný soubor kontroleru. Tato šablona odpovídá tomu, že v předchozích verzích ASP.NET MVC nekontroluje přidání akcí pro scénáře vytvoření, úprav, podrobností a odstranění . Pokud zvolíte tuto možnost, nebudou k dispozici žádné další možnosti.

Kontroler s prázdnými akcemi čtení a zápisu

Tato šablona vygeneruje soubor kontroleru, který obsahuje všechny požadované metody akcí, ale v metodách žádný implementační kód. Tato šablona je ekvivalentem zaškrtnutí políčka Přidat akce pro scénáře vytvoření, úprav, podrobností a odstranění v předchozích verzích ASP.NET MVC. Pokud zvolíte tuto možnost, nebudou k dispozici žádné další možnosti.

Kontroler s akcemi čtení/zápisu a zobrazeními s využitím Entity Frameworku

Tato šablona umožňuje rychle vytvořit funkční uživatelské rozhraní pro zadávání dat. Generuje kód, který zpracovává řadu běžných požadavků a scénářů, například následující:

  • Přístup k datům. Vygenerovaný kód čte a zapisuje entity v databázi. Funguje s přístupem Entity Framework Code First, pokud zvolíte existující třídu kontextu dat nebo pokud necháte šablonu vygenerovat novou třídu DbContext . Funguje také s přístupem Entity Framework Database First nebo Model First, pokud zvolíte existující třídu ObjectContext .

  • Ověření. Vygenerovaný kód používá ASP.NET funkce vazby modelu MVC a metadat, aby se odesílání formulářů ověřovalo podle pravidel deklarovaných ve třídě modelu. To zahrnuje předdefinované ověřovací pravidla, jako jsou atributy Required a StringLength , a vlastní ověřovací pravidla.

  • Vztahy 1:N. Pokud definujete relace 1:N cizího klíče mezi třídami modelu, vygenerovaný kód vytvoří rozevírací seznamy pro výběr souvisejících entit. Můžete například definovat následující třídy modelu podle konvencí 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; }
    }
    

    Když pak vygenerujete kontroler pro třídu Product , jeho zobrazení umožní uživatelům zvolit objekt Category pro každou instanci Produktu .

    Tato šablona umožňuje další možnosti v dialogovém okně Přidat kontroler . V části Modelová třída můžete v řešení zvolit libovolnou třídu modelu, která určuje typ dat, která budou moct uživatelé vytvářet nebo upravovat:

  • Pokud chcete použít Entity Framework Code First, můžete zvolit libovolnou třídu modelu.

  • Pokud používáte Entity Framework Database First nebo Entity Framework Model First, nezapomeňte zvolit třídu entit definovanou v koncepčním modelu.

Pro třídu Kontext dat můžete zvolit tyto možnosti:

  • Pokud chcete použít Code First a nemáte žádnou existující třídu kontextu dat, zvolte **Nový kontext dat **. Potom se pro vás vygeneruje třída kontextu dat.
  • Pokud chcete použít Code First a mít existující třídu kontextu dat, zvolte ji tady. Aktualizuje se tak, aby zachoval vybranou třídu modelu.
  • Pokud používáte Database First nebo Model First, zvolte zde třídu kontextu objektu.

V části Zobrazení zvolte modul zobrazení, který chcete použít, nebo zvolte Žádné, pokud nechcete vygenerovat žádná zobrazení.

Pokud chcete zadat další možnosti pro vygenerovaná zobrazení, můžete vybrat Upřesnit možnosti. Můžete například zvolit rozložení nebo stránku předlohy, které chcete použít.

Vylepšení dialogového okna Nový projekt ASP.NET MVC 3

Dialogové okno, které použijete k vytvoření nových projektů ASP.NET MVC 3, obsahuje několik vylepšení, jak je uvedeno níže.

Snímek obrazovky s dialogovým oknem nový projekt Ikona Intranetová aplikace a zaškrtávací políčko Použít H T M L 5 sémantické značky jsou zvýrazněné.

Nová šablona intranetového projektu

Seznam Šablona projektu obsahuje novou šablonu intranetové aplikace. Tato šablona obsahuje nastavení pro vytváření webové aplikace pomocí ověřování systému Windows místo ověřování pomocí formulářů. Vzhledem k tomu, že intranetová aplikace vyžaduje určitá nastavení služby IIS, která nelze zapouzdřit do šablony projektu, obsahuje šablona soubor readme s pokyny, jak nastavit, aby šablona projektu fungovala ve službě IIS. Dokumentace k nové šabloně intranetové aplikace je k dispozici na webu MSDN na následující adrese URL:

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

Šablony projektů jsou teď povolené ve formátu HTML5.

Dialogové okno new-project teď obsahuje možnost přidat do šablon projektů funkce specifické pro HTML5. Výběr možnosti způsobí, že se vygenerují zobrazení, která obsahují nové prvky HTML5 <header>, <footer>a <navigation> .

Všimněte si, že starší verze prohlížečů nepodporují značky specifické pro HTML5. Aby bylo toto omezení řešeno, šablony projektů HTML5 obsahují odkaz na knihovnu Modernr. (Viz další část.)

Šablony projektů teď obsahují Modernr 1.7

Modernr je javascriptová knihovna, která umožňuje podporu šablon stylů CSS 3 a HTML5 v prohlížečích, které tyto funkce ještě nepodporují. Tato knihovna je zahrnutá jako předinstalovaný balíček NuGet v šablonách pro projekty ASP.NET MVC 3. Další informace o aplikaci Modernr najdete v tématu http://www.modernizr.com/.

Šablony projektů zahrnují aktualizované verze jQuery, uživatelského rozhraní jQuery a ověřování jQuery.

Šablony projektu teď obsahují následující verze skriptů jQuery:

  • jQuery 1.5.1
  • jQuery Validation 1.8
  • uživatelské rozhraní jQuery 1.8.11

Tyto knihovny jsou součástí předinstalovaných balíčků NuGet.

Šablony projektů teď obsahují ADO.NET Entity Framework 4.1 jako předinstalovaný balíček NuGet.

ADO.NET Entity Framework 4.1 obsahuje funkci Code First. Code First je nový vzor vývoje pro ADO.NET Entity Framework, který poskytuje alternativu k existujícím vzorům Database First a Model First.

Code First se zaměřuje na definování modelu pomocí tříd POCO ("prostých starých objektů CLR") napsaných v jazyce Visual Basic nebo C#. Tyto třídy lze pak namapovat na existující databázi nebo je použít k vygenerování schématu databáze. Další konfiguraci je možné zadat pomocí atributů DataAnnotations nebo fluent API.

Dokumentace k používání Code Firstwith ASP.NET MVC je k dispozici na webu ASP.NET na následujících adresách 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

Šablony projektů zahrnují javascriptové knihovny jako předinstalované balíčky NuGet.

Když vytvoříte nový projekt ASP.NET MVC 3, projekt zahrne dříve zmíněné soubory JavaScriptu (například knihovnu Modernizr) tak, že je nainstaluje pomocí NuGetu místo toho, aby přímo přidával skripty do složky Scripts v obsahu šablony projektu. To vám umožní použít NuGet k aktualizaci skriptů na nejnovější verzi při vydání nových verzí skriptů.

Například vzhledem k četnosti nových verzí jQuery bude verze jQuery zahrnutá do šablony projektu v určitém okamžiku za aktuální. Vzhledem k tomu, že jQuery je součástí nainstalovaného balíčku NuGet, budete upozorněni v dialogovém okně NuGet, jakmile budou k dispozici novější verze jQuery.

Vzhledem k tomu, že jQuery obsahuje v názvu souboru číslo verze, vyžaduje aktualizace jQuery na nejnovější verzi také aktualizaci <script> značky, která odkazuje na soubor jQuery, aby používala nový název souboru. Jiné zahrnuté knihovny skriptů nezahrnují číslo verze v názvu skriptu, takže je možné je snadněji aktualizovat na nejnovější verze.

Známé problémy v ASP.NET MVC 3

  • V některých případech může instalace selhat s chybovou zprávou "Instalace selhala s kódem chyby (0x80070643)". Informace o tom, jak tento problém vyřešit, najdete v článku znalostní báze KnowledgeBase 2531566.
  • Generování uživatelského rozhraní pro přidání kontroleru nevygeneruje entity, které využívají podporu dědičnosti entit v rámci Entity Frameworku. Například při použití základní třídy Person , která je zděděná třídou Student , generování třídy Student způsobí vygenerovaný kód, který se nezkompiluje.
  • Vytvoření nového projektu ASP.NET MVC 3 ve složce řešení způsobí chybu NullReferenceException . Alternativním řešením je vytvořit projekt ASP.NET MVC 3 v kořenovém adresáři řešení a pak ho přesunout do složky řešení.
  • Při instalaci nástroje ReSharper nefunguje syntaxe IntelliSense pro Razor. Pokud máte nainstalovaný ReSharper a chcete využít podporu Razor IntelliSense v ASP.NET MVC 3, podívejte se na položku Razor Intellisense a ReSharper na blogu Hadi Hariri, který popisuje způsoby, jak je dnes používat společně.
  • Během instalace se v dialogovém okně přijetí smlouvy EULA zobrazí licenční podmínky v okně, které je menší, než bylo zamýšleno.
  • Při úpravách zobrazení Razor (.cshtml nebo .vbhtml ), zobrazení. ASP.NET MVC 3 neobsahuje žádné fragmenty kódu pro zobrazení Razor. při výběru fragmentu kódu pro ASP.NET MVC se zobrazí fragmenty kódu pro
  • Pokud nainstalujete ASP.NET MVC 3 for Visual Web Developer Express na počítač, na kterém není nainstalovaná sada Visual Studio, a později nainstalujte sadu Visual Studio, musíte přeinstalovat ASP.NET MVC 3. Visual Studio a Visual Web Developer Express sdílejí komponenty upgradované instalačním programem ASP.NET MVC 3. Stejný problém platí v případě, že nainstalujete ASP.NET MVC 3 pro Visual Studio na počítač, na kterém není Visual Web Developer Express, a později nainstalujete Visual Web Developer Express.

Změny v ASP.NET MVC 3 RTM

Tato část popisuje změny a opravy chyb provedené ve verzi ASP.NET MVC 3 RTM od verze RC2.

Změna: Aktualizace verze uživatelského rozhraní jQuery na 1.8.7

Šablony projektů ASP.NET MVC pro Visual Studio byly aktualizovány tak, aby zahrnovaly nejnovější verzi knihovny uživatelského rozhraní jQuery. Šablony také zahrnují minimální sadu souborů prostředků vyžadovaných uživatelským rozhraním jQuery, jako jsou přidružené šablony stylů CSS a soubory obrázků.

Změna: Změna výchozího poskytovatele ModelMetadataProvider zpět na DataAnnotationsModelMetadataProvider

Verze RC2 ASP.NET MVC 3 zavedla Třídu CachedDataAnnotationsMetadataProvider , která poskytovala ukládání do mezipaměti nad stávající DataAnnotationsModelMetadataProvider třídy jako zvýšení výkonu. V této implementaci se ale nahlásily některé chyby, takže se změna vrátila a přesunula do projektu MVC Futures, který je k dispozici na webu ASP.NET WebStack.

Opraveno: Vložení části výrazu Razor, která obsahuje prázdné znaky, způsobí, že se vrátí zpět

Když v předběžných verzích ASP.NET MVC 3 vložíte část výrazu Razor, která obsahuje prázdné znaky, do souboru Razor, výsledný výraz se vrátí zpět. Představte si například následující blok kódu Razor:

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

Pokud vyberete text "first param" v první metodě a vložíte ho jako argument do druhé metody, výsledek bude následující:

@AnotherMethod(param""first)

Správné chování je, že operace vložení by měla mít za následek následující:

@AnotherMethod("first param")

Tento problém je opravený ve verzi RTM, aby se výraz během operace vložení správně zachoval.

Opraveno: Přejmenování souboru Razor, který je otevřen v editoru, zakáže zabarvení syntaxe a IntelliSense

Přejmenování souboru Razor pomocí Průzkumník řešení při otevření souboru v okně editoru způsobí, že u daného souboru přestane fungovat zvýrazňování syntaxe a technologie IntelliSense. To bylo opraveno tak, aby se po přejmenování zachovalo zvýraznění a technologie IntelliSense.

Známé problémy s ASP.NET MVC 3 RTM

  • Pokud zavřete Visual Studio 2010 SP1 Beta v době, kdy je otevřená konzola Správce balíčků NuGet, dojde k chybě sady Visual Studio a pokusí se ho restartovat. Tento stav opravíme ve verzi RTM sady Visual Studio 2010 SP1.
  • Instalační program ASP.NET MVC 3 dokáže nainstalovat pouze počáteční verzi správce balíčků NuGet. Po instalaci počáteční verze můžete NuGet nainstalovat a aktualizovat pomocí Správce rozšíření sady Visual Studio. Pokud už máte NuGet nainstalovaný, přejděte do galerie rozšíření sady Visual Studio a aktualizujte ho na nejnovější verzi.
  • Vytvoření nového projektu ASP.NET MVC 3 ve složce řešení způsobí chybu NullReferenceException . Alternativním řešením je vytvořit projekt ASP.NET MVC 3 v kořenovém adresáři řešení a pak ho přesunout do složky řešení.
  • Dokončení instalačního programu může trvat mnohem déle než v předchozích verzích ASP.NET MVC. Je to proto, že aktualizuje součásti sady Visual Studio 2010.
  • Při instalaci nástroje ReSharper nefunguje syntaxe IntelliSense pro Razor. Pokud máte nainstalovaný ReSharper a chcete využít podporu Razor IntelliSense v ASP.NET MVC 3, podívejte se na položku Razor Intellisense a ReSharper na blogu Hadi Hariri, který popisuje způsoby, jak je dnes používat společně.
  • Zobrazení CCSHTML a VBHTML vytvořená s beta verzí ASP.NET MVC 3 nemají správně nastavenou akci sestavení, takže při publikování projektu jsou tyto typy zobrazení vynechány. Hodnota Akce sestavení pro tyto soubory by měla být nastavena na "Obsah". ASP.NET MVC 3 RTM tento problém u nových souborů opraví, ale neopraví nastavení pro existující soubory pro projekt vytvořený s předběžnými verzemi.
  • Snímek obrazovky s dialogovým oknem Vlastnosti a otevřenou nabídkou akce sestavení Je vybraná možnost obsahu.
  • Během instalace se v dialogovém okně přijetí smlouvy EULA zobrazí licenční podmínky v okně, které je menší, než bylo zamýšleno.
  • Při úpravách zobrazení Razor (soubor .cshtml) nebude položka nabídky Přejít na kontroler v sadě Visual Studio dostupná a nebudou k dispozici žádné fragmenty kódu.
  • Pokud nainstalujete ASP.NET MVC 3 for Visual Web Developer Express na počítač, na kterém není nainstalovaná sada Visual Studio, a později nainstalujte sadu Visual Studio, musíte přeinstalovat ASP.NET MVC 3. Visual Studio a Visual Web Developer Express sdílejí komponenty upgradované instalačním programem ASP.NET MVC 3. Stejný problém platí v případě, že nainstalujete ASP.NET MVC 3 pro Visual Studio na počítač, na kterém není Visual Web Developer Express, a později nainstalujete Visual Web Developer Express.

Zásadní změny v ASP.NET MVC 3

  • V předchozích verzích ASP.NET MVC se filtry akcí vytvářejí pro jednotlivé požadavky s výjimkou několika případů. Toto chování nikdy nebylo zaručeným chováním, ale pouze podrobností implementace a kontrakt pro filtry je měl považovat za bezstavový. V ASP.NET MVC 3 se filtry ukládají do mezipaměti agresivněji. Proto všechny filtry vlastních akcí, které nesprávně ukládají stav instance, můžou být poškozené.
  • Pořadí provádění filtrů výjimek se změnilo pro filtry výjimek, které mají stejnou hodnotu Order . V ASP.NET MVC 2 a starších se filtry výjimek na kontroleru, které mají stejnou hodnotu Order jako v metodě akce, spouštějí před filtry výjimek pro metodu akce. Obvykle se jedná o případ, kdy se filtry výjimek použijí bez zadané hodnoty Order . V ASP.NET MVC 3 bylo toto pořadí obrácené tak, aby se jako první spustila nejkonsifičnější obslužná rutina výjimky. Stejně jako v předchozích verzích platí, že pokud je vlastnost Order explicitně zadána, filtry se spouštějí v zadaném pořadí.
  • Do základní třídy VirtualPathProviderViewEngine byla přidána nová vlastnost FileExtensions. Když ASP.NET hledá zobrazení podle cesty (ne podle názvu), zvažují se pouze zobrazení s příponou souboru obsaženou v seznamu určeném touto novou vlastností. Jedná se o zásadní změnu v aplikacích, kde je registrován vlastní zprostředkovatel sestavení za účelem povolení vlastní přípony souborů pro zobrazení webových formulářů a kde zprostředkovatel odkazuje na tato zobrazení pomocí úplné cesty místo názvu. Alternativním řešením je změnit hodnotu vlastnosti FileExtensions tak, aby zahrnovala vlastní příponu souboru.
  • Vlastní kontroler výrobní implementace, které přímo implementují IControllerFactory rozhraní musí poskytovat implementaci nové GetControllerSessionBehavior metoda, která byla přidána do rozhraní v této verzi. Obecně se doporučuje neimplementovat toto rozhraní přímo a místo toho odvodit třídu z DefaultControllerFactory.

Změny v ASP.NET MVC 3 RC2

Tato část popisuje změny (nové funkce a opravy chyb) provedené ve verzi ASP.NET MVC 3 RC2 od verze RC.

Změna šablon projektů tak, aby zahrnovaly jQuery 1.4.4, jQuery Validation 1.7 a uživatelské rozhraní jQuery 1.8.6

Šablony projektů pro ASP.NET MVC 3 teď obsahují nejnovější verze jQuery, ověřování jQuery a uživatelského rozhraní jQuery. Uživatelské rozhraní jQuery je novým doplňkem šablon projektů a poskytuje užitečné widgety uživatelského rozhraní. Další informace o uživatelském rozhraní jQuery najdete na jeho domovské stránce: http://jqueryui.com/.

Přidání třídy AdditionalMetadataAttribute

Pomocí třídy AdditionalMetadataAttribute můžete naplnit slovník ModelMetadata.AdditionalValues pro vlastnost modelu.

Předpokládejme například, že model zobrazení má vlastnosti, které by se měly zobrazit pouze správci. Tento model je možné anotovat pomocí nového atributu s použitím adminOnly jako klíče a true jako hodnoty, jako v následujícím příkladu:

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

Tato metadata jsou k dispozici pro všechny šablony zobrazení nebo editoru při vykreslení modelu zobrazení produktu. Interpretace informací metadat je na vás jako vývojáři aplikace.

Vylepšené generování zobrazení

Šablony T4 používané pro zobrazení generování uživatelského rozhraní nyní generují volání pomocných metod šablon, jako je EditorFor místo pomocných rutin, jako je TextBoxFor. Tato změna zlepšuje podporu metadat v modelu ve formě atributů datových poznámek, když dialogové okno Přidat zobrazení vygeneruje zobrazení.

Generování uživatelského rozhraní Přidat zobrazení také zahrnuje vylepšené zjišťování a používání informací o primárních klíčích v modelu na základě konvence. Například dialogové okno Přidat zobrazení používá tyto informace k zajištění, aby hodnota primárního klíče nebyla vygenerována jako upravitelné pole formuláře.

Výchozí šablony Upravit a Vytvořit obsahují odkazy na skripty jQuery potřebné pro ověření klienta.

Přidání metody Html.Raw

Ve výchozím nastavení kóduje všechny hodnoty html modul zobrazení Razor. Například následující fragment kódu zakóduje kód HTML uvnitř proměnné greet, aby se na stránce zobrazil jako <strong>Hello World!</strong>.

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

<p>@greeting</p>

Nová Html.Raw metoda poskytuje jednoduchý způsob zobrazení nekódovaného HTML, pokud je známo, že obsah je bezpečný. Následující příklad zobrazí stejný řetězec, ale řetězec se vykreslí jako kód:

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

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

Přejmenování vlastnosti Controller.ViewModel a vlastnosti ViewBag na ViewBag

Dříve vlastnost ViewModelkontroleru odpovídala vlastnosti View zobrazení. Obě tyto vlastnosti poskytují způsob přístupu k hodnotám objektu ViewDataDictionary pomocí syntaxe dynamické vlastnosti-accessor. Obě vlastnosti byly přejmenovány tak, aby byly stejné, aby nedocházelo k nejasnostem a aby byly konzistentnější.

Přejmenování třídy ControllerSessionStateAttribute na SessionStateAttribute

Třída ControllerSessionStateAttribute byla zavedena ve verzi RC ASP.NET MVC 3. Vlastnost byla přejmenována na stručnější.

Přejmenování vlastnosti RemoteAttribute "Fields" na "AdditionalFields"

Vlastnost Fields třídy RemoteAttribute způsobila určité nejasnosti mezi uživateli. Přejmenování této vlastnosti na AdditionalFields objasní její záměr.

Přejmenování SkipRequestValidationAttribute na AllowHtmlAttribute

SkipRequestValidationAttribute atribut byl přejmenován na AllowHtmlAttribute, aby lépe reprezentoval jeho zamýšlené použití.

Změna metody Html.ValidationMessage tak, aby zobrazovala první užitečnou chybovou zprávu

Metoda Html.ValidationMessage byla opravena tak, aby zobrazovala první užitečnou chybovou zprávu místo pouhého zobrazení první chyby.

Během vazby modelu lze slovník ModelState naplnit z více zdrojů s chybovými zprávami o vlastnosti, včetně ze samotného modelu (pokud implementuje IValidatableObject), z ověřovacích atributů použitých na vlastnost a z výjimek vyvolaných při přístupu k vlastnosti.

Když Html.ValidationMessage metoda zobrazí ověřovací zprávu, přeskočí položky stavu modelu, které obsahují výjimku, protože obvykle nejsou určeny pro koncového uživatele. Místo toho metoda vyhledá první ověřovací zprávu, která není přidružena k výjimce, a zobrazí tuto zprávu. Pokud se žádná taková zpráva nenajde, ve výchozím nastavení se zobrazí obecná chybová zpráva, která je přidružená k první výjimce.

Oprava @model deklarace nepřidání prázdných znaků do dokumentu

V dřívějších verzích @model deklarace v horní části zobrazení přidala prázdný řádek do vykresleného výstupu HTML. To bylo opraveno tak, aby deklarace nezaváděla prázdné znaky.

Přidání vlastnosti FileExtensions pro zobrazení modulů pro podporu Engine-Specific názvů souborů

Modul zobrazení může vrátit zobrazení pomocí explicitní cesty zobrazení jako v následujícím příkladu:

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

První modul zobrazení se vždy pokusí zobrazení vykreslit. Ve výchozím nastavení je modul zobrazení Web Forms prvním modulem zobrazení. Protože modul Web Forms nemůže vykreslit zobrazení Razor, dojde k chybě. Moduly zobrazení teď mají vlastnost FileExtensions , která slouží k určení, které přípony souborů podporují. Tato vlastnost je kontrolována, když ASP.NET určuje, zda modul zobrazení může vykreslit soubor. Jedná se o zásadní změnu a další podrobnosti najdete v části Zásadní změny tohoto dokumentu.

Oprava pomocné rutiny "LabelFor", která vygeneruje správnou hodnotu pro atribut "For".

Byla opravena chyba, kdy metoda LabelFor vykreslila atribut pro, který odpovídá atributu nameelementu input namísto jeho ID. Podle W3C by měl atribut for odpovídat ID vstupního prvku.

Oprava metody RenderAction pro udělení priority explicitních hodnot během vazby modelu

V dřívějších verzích byly explicitní hodnoty, které byly předány metodě RenderAction , ignorovány ve prospěch aktuálních hodnot formuláře během vazby modelu uvnitř podřízené akce. Oprava zajišťuje, že explicitní hodnoty budou mít přednost při vytváření vazby modelu.

Zásadní změny v ASP.NET MVC 3 RC2

  • V předchozích verzích ASP.NET MVC byly filtry akcí vytvořeny pro jednotlivé požadavky s výjimkou několika případů. Toto chování nikdy nebylo zaručeným chováním, ale pouze podrobností implementace a kontraktem pro filtry bylo považovat je za bezstavové. V ASP.NET MVC 3 se filtry ukládají do mezipaměti agresivněji. Proto všechny filtry vlastních akcí, které nesprávně ukládají stav instance, můžou být poškozené.
  • Pořadí provádění pro filtry výjimek se změnilo u filtrů výjimek, které mají stejnou hodnotu Order . V ASP.NET MVC 2 a starších se filtry výjimek na kontroleru, které měly stejnou hodnotu Order jako v metodě akce, spustily před filtry výjimek v metodě akce. Obvykle se jedná o případ, kdy byly použity filtry výjimek bez zadané hodnoty Order . V ASP.NET MVC 3 bylo toto pořadí obráceno tak, aby se jako první spustila nejkonsekvnější obslužná rutina výjimky. Stejně jako v předchozích verzích, pokud je vlastnost Order explicitně zadána, filtry se spustí v zadaném pořadí.
  • Do základní třídy VirtualPathProviderViewEngine byla přidána nová vlastnost s názvem FileExtensions. Při ASP.NET hledá zobrazení podle cesty (ne podle názvu), jsou zvažována pouze zobrazení s příponou souboru obsaženou v seznamu určeném touto novou vlastností. Jedná se o zásadní změnu v aplikacích, kde je zaregistrovaný vlastní zprostředkovatel sestavení za účelem povolení vlastní přípony souborů pro zobrazení webových formulářů a kde zprostředkovatel odkazuje na tato zobrazení pomocí úplné cesty místo názvu. Alternativním řešením je upravit hodnotu Vlastnosti FileExtensions tak, aby zahrnovala vlastní příponu souboru.
  • Vlastní kontroler výrobní implementace, které přímo implementují IControllerFactory rozhraní musí poskytovat implementaci nové GetControllerSessionBehavior metody, která byla přidána do rozhraní v této verzi. Obecně se doporučuje neimplementovat toto rozhraní přímo a místo toho odvodit třídu z DefaultControllerFactory.

Známé problémy v ASP.NET MVC 3 RC2

  • Instalační program ASP.NET MVC 3 dokáže nainstalovat pouze počáteční verzi správce balíčků NuGet. Po instalaci počáteční verze můžete NuGet nainstalovat a aktualizovat pomocí Správce rozšíření sady Visual Studio. Pokud už máte NuGet nainstalovaný, přejděte do galerie rozšíření sady Visual Studio a aktualizujte ho na nejnovější verzi NuGetu.
  • Vytvoření nového projektu ASP.NET MVC 3 ve složce řešení způsobí chybu NullReferenceException . Alternativním řešením je vytvořit projekt ASP.NET MVC 3 v kořenovém adresáři řešení a pak ho přesunout do složky řešení.
  • Dokončení instalačního programu může trvat mnohem déle než předchozí verze ASP.NET MVC. Důvodem je aktualizace komponent sady Visual Studio 2010.
  • Syntaxe IntelliSense pro Razor nefunguje, když je nainstalovaný ReSharper. Pokud máte nainstalovaný ReSharper a chcete využít podporu Razor IntelliSense v ASP.NET MVC 3 RC2, podívejte se na položku Razor Intellisense a ReSharper na blogu Hadi Hariri, který popisuje způsoby, jak je používat společně dnes.
  • Zobrazení CSHTML a VBHTML vytvořená s beta verzí ASP.NET MVC 3 nemají správně nastavenou akci sestavení, takže tyto typy zobrazení jsou při publikování projektu vynechány. Hodnota Akce sestavení pro tyto soubory by měla být nastavená na Obsah. ASP.NET MVC 3 RC2 tento problém opraví u nových souborů, ale neopraví nastavení pro existující soubory pro projekt vytvořený s beta verzí. Snímek obrazovky s dialogovým oknem vlastností Otevře se nabídka akce sestavení a vybere se možnost obsahu.
  • Během instalace zobrazí dialogové okno přijetí smlouvy EULA licenční podmínky v okně, které je menší, než bylo zamýšleno.
  • Při úpravách zobrazení Razor (soubor .cshtml) nebude položka nabídky Přejít na kontroler v sadě Visual Studio dostupná a nebudou k dispozici žádné fragmenty kódu.
  • Pokud nainstalujete ASP.NET MVC 3 pro Visual Web Developer Express na počítač, na kterém není nainstalovaná sada Visual Studio, a později nainstalujete sadu Visual Studio, musíte přeinstalovat ASP.NET MVC 3. Visual Studio a Visual Web Developer Express sdílejí komponenty upgradované instalačním programem ASP.NET MVC 3. Stejný problém platí, pokud nainstalujete ASP.NET MVC 3 pro Visual Studio do počítače, který nemá Visual Web Developer Express, a později nainstalujete Visual Web Developer Express.
  • Instalace ASP.NET MVC 3 RC 2 neaktualizuje NuGet, pokud už ho máte nainstalovanou. Pokud chcete upgradovat NuGet, přejděte do správce rozšíření sady Visual Studio, který by se měl zobrazit jako dostupná aktualizace. Odtud můžete upgradovat NuGet na nejnovější verzi.

ASP.NET MVC 3 Release Candidate

ASP.NET MVC Release Candidate byl vydán 9. listopadu 2010.

Nové funkce v ASP.NET MVC 3 RC

Tato část popisuje funkce, které byly zavedeny ve verzi ASP.NET MVC 3 RC od vydání beta verze.

Správce balíčků NuGet

ASP.NET MVC 3 zahrnuje Správce balíčků NuGet (dříve označovaný jako NuPack), což je integrovaný nástroj pro správu balíčků pro přidávání knihoven a nástrojů do projektů sady Visual Studio. Tento nástroj automatizuje kroky, které vývojáři dnes podnikají, aby získali knihovnu do svého zdrojového stromu.

S NuGetem můžete pracovat jako s nástrojem příkazového řádku, jako integrovaným oknem konzoly v sadě Visual Studio 2010, z místní nabídky sady Visual Studio a jako sady rutin PowerShellu.

Další informace o NuGetu najdete v dokumentaci k Nugetu.

Vylepšené dialogové okno Nový projekt

Při vytváření nového projektu teď dialogové okno Nový projekt umožňuje zadat modul zobrazení a typ projektu ASP.NET MVC.

Snímek obrazovky s dialogovým oknem nový projekt Nabídka modulu zobrazení je otevřená a je vybraná možnost Razor.

V této verzi je zahrnuta podpora pro úpravu seznamu šablon a modulů zobrazení uvedených v dialogovém okně.

Výchozí šablony jsou následující:

Prázdné. Obsahuje minimální sadu souborů pro projekt ASP.NET MVC, včetně výchozí adresářové struktury pro projekty ASP.NET MVC, souboru Site.css, který obsahuje výchozí styly ASP.NET MVC a adresáře Scripts, který obsahuje výchozí soubory JavaScriptu.

Internetová aplikace. Obsahuje ukázkovou funkci, která ukazuje, jak používat poskytovatele členství s ASP.NET MVC.

Seznam šablon projektů, který se zobrazí v dialogovém okně, je zadán v registru systému Windows.

Řadiče bez relací

Nový ControllerSessionStateAttribute poskytuje větší kontrolu nad chováním stavu relace pro kontrolery zadáním hodnoty výčtu System.Web.SessionState.SessionStateBehavior .

Následující příklad ukazuje, jak vypnout stav relace pro všechny požadavky na kontroler.

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

    }
}

Následující příklad ukazuje, jak nastavit stav relace jen pro čtení pro všechny požadavky kontroleru.

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

Nové ověřovací atributy

CompareAttribute

Nový ověřovací atribut CompareAttribute umožňuje porovnat hodnoty dvou různých vlastností modelu. V následujícím příkladu musí vlastnost ComparePassword odpovídat poli Heslo , aby byla platná.

public class User {
    [Required]

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

RemoteAttribute

Nový atribut ověřování RemoteAttribute využívá výhod vzdáleného validátoru modulu plug-in jQuery Validation, který umožňuje ověření na straně klienta volat metodu na serveru, která provádí skutečnou logiku ověření.

V následujícím příkladu má vlastnost UserNameremoteAttribute . Při úpravách této vlastnosti v zobrazení pro úpravy bude ověření klienta volat akci s názvem UserNameAvailable ve třídě UsersController za účelem ověření tohoto pole.

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

Následující příklad ukazuje odpovídající kontroler.

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

Ve výchozím nastavení se název vlastnosti, na kterou je atribut použit, odesílá metodě akce jako parametr řetězce dotazu.

Nová přetížení pro metody "LabelFor" a "LabelForModel"

Byla přidána nová přetížení pro Metody LabelFor a LabelForModel , které umožňují zadat text popisku. Následující příklad ukazuje, jak tato přetížení používat.

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

Ukládání výstupu podřízené akce do mezipaměti

OutputCacheAttribute podporuje ukládání výstupu do mezipaměti podřízených akcí, které jsou volána pomocí html.RenderAction nebo Html.Action pomocné metody. Následující příklad ukazuje zobrazení, které volá jinou akci.

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

Akce GetDate je opatřena poznámkami OutputCacheAttribute:

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

Při spuštění tohoto kódu se výsledek volání Html.Action("GetDate") ukládá do mezipaměti po dobu 100 sekund.

Vylepšení dialogového okna Přidat zobrazení

Když přidáte zobrazení se silnými typy, dialogové okno Přidat zobrazení teď vyfiltruje více nepoužitelné typy než v předchozích verzích, například mnoho základních typů rozhraní .NET Framework. Seznam je teď také seřazený podle názvu třídy, a ne podle plně kvalifikovaného názvu typu, což usnadňuje hledání typů. Například název typu se teď zobrazí jako v následujícím příkladu:

ClassName (obor názvů)

V dřívějších verzích by se to zobrazovalo takto:

Obornázvů.názevtřídy

Podrobné ověření požadavků

Vlastnost Excludepro ValidateInputAttribute již neexistuje. Místo toho k přeskočení ověření požadavku pro konkrétní vlastnosti modelu během vazby modelu použijte nový SkipRequestValidationAttribute.

Předpokládejme například, že se k úpravě blogového příspěvku používá metoda akce:

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

Následující příklad ukazuje model zobrazení pro blogový příspěvek.

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

    public string Subject {get; set;}

    public string Description {get; set;}
}

Když uživatel odešle nějaké značky pro vlastnost Description, vazba modelu selže kvůli ověření požadavku. Pokud chcete zakázat ověření požadavku během vazby modelu pro blogový příspěvek Popis, použijte skipRequpestValidationAttribute vlastnost, jak je znázorněno v tomto příkladu:.

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

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

Pokud chcete také vypnout ověřování požadavků pro každou vlastnost modelu, použijte na metodu action atribut ValidateInputAttribute s hodnotou false :

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

Zásadní změny v ASP.NET MVC 3 RC

  • Pořadí provádění pro filtry výjimek se změnilo u filtrů výjimek, které mají stejnou hodnotu Order . V ASP.NET MVC 2 a starších se filtry výjimek na kontroleru, které měly stejné pořadí jako v metodě akce, spustily před filtry výjimek v metodě akce. Obvykle se jedná o případ, kdy byly použity filtry výjimek bez zadané hodnoty Order . V ASP.NET MVC 3 bylo toto pořadí obráceno tak, aby se jako první spustila nejkonsekvnější obslužná rutina výjimky. Stejně jako v předchozích verzích, pokud je vlastnost Order explicitně zadána, filtry se spustí v zadaném pořadí.
  • Do základní třídy VirtualPathProviderViewEngine byla přidána nová vlastnost FileExtensions. Při vyhledávání zobrazení podle cesty (a ne podle názvu) se zohlední pouze zobrazení s příponou souboru obsaženou v seznamu určeném touto novou vlastností. Jedná se o zásadní změnu pro ty, kteří registrují vlastního zprostředkovatele sestavení, aby povolili vlastní příponu souborů pro zobrazení webových formulářů a odkazují na tato zobrazení pomocí úplné cesty místo názvu. Alternativním řešením je upravit hodnotu Vlastnosti FileExtensions tak, aby zahrnovala vlastní příponu souboru.

Známé problémy v ASP.NET MVC 3 RC

  • Dokončení instalačního programu může trvat mnohem déle než předchozí verze ASP.NET MVC, protože aktualizuje součásti sady Visual Studio 2010.
  • Generování uživatelského rozhraní Přidat zobrazení při výběru stroce zadaného zobrazení vygeneruje vlastnosti jen pro zápis. Tyto možnosti by měly být vždy ignorovány při generování uživatelského rozhraní. Dialogové okno Přidat zobrazení také generuje vlastnosti jen pro čtení při generování zobrazení Upravit nebo Vytvořit. Vlastnosti jen pro čtení by měly být vygenerované jenom pro zobrazení Zobrazení a Seznam.
  • Při instalaci ASP.NET MVC 3 společně s asynchronním CTP nefunguje ladění. ASP.NET MVC 3 nelze nainstalovat souběžně s asynchronním protokolem CTP. Odinstalujte Async CTP a opravte ladění. Další podrobnosti najdete v tomto blogovém příspěvku o odinstalaci všech částí ASP.NET MVC 3 RC.
  • Razor IntelliSense nefunguje, když je nainstalován Resharper. Pokud máte nainstalovaný ReSharper a chcete využít podporu Technologie IntelliSense Razor v ASP.NET MVC 3 RC, přečtěte si prosím tento blogový příspěvek od JetBrains, který popisuje způsoby, jak je používat společně dnes.
  • Zobrazení CSHTML a VBHTML vytvořená s beta verzí ASP.NET MVC 3 nemají správnou akci sestavení, která je vynechá z publikování. Akce sestavení pro tyto soubory by měla být nastavená na Obsah. ASP.NET MVC 3 RC tento problém opraví u nových souborů, ale neopraví nastavení pro existující soubory pro projekt vytvořený pomocí beta verze.
  • Dokončení instalačního programu může trvat mnohem déle než předchozí verze ASP.NET MVC, protože aktualizuje součásti sady Visual Studio 2010.
  • Generování uživatelského rozhraní Přidat zobrazení při výběru uživatelského rozhraní "Upravit" se silnými typy zobrazení má vlastnosti jen pro čtení. Podobně jsou vlastnosti jen pro zápis vygenerovány pro zobrazení Zobrazení.
  • Během instalace zobrazí dialogové okno přijetí smlouvy EULA licenční podmínky v okně, které je menší, než bylo zamýšleno.
  • Instalace sady Visual Studio Async CTP způsobí konflikt s verzí Razor, která je součástí instalace nástrojů ASP.NET MVC 3. Ujistěte se, že se na stejný počítač nepokoušíte nainstalovat jak visual Studio Async CTP, tak verzi Razor.
  • Při úpravách zobrazení Razor (soubor .cshtml) nebude položka nabídky Přejít na kontroler v sadě Visual Studio dostupná a nebudou k dispozici žádné fragmenty kódu.

ASP.NET MVC 3 Beta

ASP.NET MVC 3 Beta byla vydána 6. října 2010. Následující poznámky jsou specifické pro beta verzi a podléhají aktualizacím nebo změnám uvedeným výše v části ASP.NET MVC 3 Release Candidate.

Nové funkce v ASP.NET MVC 3 Beta

Tato část popisuje funkce, které byly zavedeny ve verzi ASP.NET MVC 3 Beta.

Správce balíčků NuGet

ASP.NET MVC 3 obsahuje Správce balíčků NuGet, což je integrovaný nástroj pro správu balíčků pro přidávání knihoven a nástrojů do projektů sady Visual Studio. Většinou automatizuje kroky, které vývojáři dnes podnikají, aby získali knihovnu do svého zdrojového stromu.

S NuGetem můžete pracovat jako s nástrojem příkazového řádku, jako integrovaným oknem konzoly v sadě Visual Studio 2010, z místní nabídky sady Visual Studio a jako sady rutin PowerShellu.

Další informace o NuGetu najdete v dokumentaci k NuGetu.

Vylepšené dialogové okno Nový projekt

Při vytváření nového projektu teď dialogové okno Nový projekt umožňuje zadat modul zobrazení a typ projektu ASP.NET MVC.

Snímek obrazovky s dialogovým oknem nový projekt Razor je vybrán z nabídky modulu zobrazení.

V této verzi není zahrnuta podpora pro úpravu seznamu šablon a modulů zobrazení uvedených v dialogovém okně.

Výchozí šablony jsou následující:

Prázdné. Obsahuje minimální sadu souborů pro projekt ASP.NET MVC, včetně výchozí adresářové struktury pro projekty ASP.NET MVC, malého souboru Site.css, který obsahuje výchozí styly ASP.NET MVC, a adresáře Scripts, který obsahuje výchozí soubory JavaScriptu.

Internetová aplikace. Obsahuje ukázkovou funkci, která ukazuje, jak používat zprostředkovatele členství v ASP.NET MVC.

Zjednodušený způsob určení modelů silného typu v zobrazeních Razor

Způsob určení typu modelu pro zobrazení Razor se silným typem byl zjednodušen pomocí nové @model direktivy pro zobrazení CSHTML a @ModelType direktivy pro zobrazení VBHTML. V dřívějších verzích ASP.NET MVC byste pro zobrazení Razor zadali model se silnými typy takto:

@inherits System.Web.Mvc.WebViewPage

V této verzi můžete použít následující syntaxi:

@model MyModelNamespace.MyModelType

Podpora nových pomocných metod webových stránek ASP.NET

Nová technologie ASP.NET Web Pages obsahuje sadu pomocných metod, které jsou užitečné pro přidání běžně používaných funkcí do zobrazení a kontrolerů. ASP.NET MVC 3 podporuje použití těchto pomocných metod v rámci kontrolerů a zobrazení (kde je to vhodné). Tyto metody jsou obsaženy v sestavení System.Web.Helpers. Následující tabulka uvádí několik pomocných metod ASP.NET webových stránek.

Pomocníka Popis
Graf Vykreslí graf v zobrazení. Obsahuje metody, jako jsou Chart.ToWebImage, Chart.Save a Chart.Write.
Crypto Používá hashovací algoritmy k vytvoření správně nasolených a hashovaných hesel.
WebGrid Vykreslí kolekci objektů (obvykle data z databáze) jako mřížku. Podporuje stránkování a řazení.
WebImage Vykreslí obrázek.
Webmail Odešle e-mailovou zprávu.

Stručné referenční téma se seznamem pomocných rutin a základní syntaxe je k dispozici jako součást dokumentace k syntaxi razor ASP.NET na následující adrese URL:

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

Další podpora injektáže závislostí

Aktuální verze vychází z verze ASP.NET MVC 3 Preview 1 a zahrnuje přidanou podporu dvou nových a čtyř existujících služeb a vylepšenou podporu pro překlad závislostí a lokátoru common service.

Nové rozhraní IControllerActivator pro vytváření instancí kontroleru Fine-Grained

Nové rozhraní IControllerActivator poskytuje podrobnější kontrolu nad způsobem vytváření instancí kontrolerů prostřednictvím injektáže závislostí. Následující příklad ukazuje rozhraní:

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

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

Porovnejte ji s rolí objektu pro vytváření kontroleru. Objekt pro vytváření kontrolerů je implementace rozhraní IControllerFactory, která je zodpovědná jak za vyhledání typu kontroleru, tak za vytvoření instance tohoto typu kontroleru.

Aktivátory kontroleru zodpovídají jenom za vytvoření instance typu kontroleru. Neprovádějí vyhledávání typu kontroleru. Po vyhledání správného typu kontroleru by objekty pro vytváření kontrolerů měly delegovat instanci IControllerActivator pro zpracování skutečné instance kontroleru.

DefaultControllerFactory Třída má nový konstruktor, který přijímá IControllerFactory instance. To vám umožní použít injektáž závislostí ke správě tohoto aspektu vytváření kontroleru, aniž byste museli přepsat výchozí chování vyhledávání typu kontroleru.

Rozhraní IServiceLocator nahrazeno rozhraním IDependencyResolver

Na základě zpětné vazby komunity nahradila verze ASP.NET MVC 3 Beta použití rozhraní IServiceLocator zeštíhleným rozhraním IDependencyResolver specifickým pro potřeby ASP.NET MVC. Následující příklad ukazuje nové rozhraní:

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

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

V rámci této změny byla třída ServiceLocator také nahrazena třídou DependencyResolver. Registrace překladače závislostí se podobá dřívějším verzím ASP.NET MVC:

DependencyResolver.SetResolver(myResolver);

Implementace tohoto rozhraní by se měly jednoduše delegovat do základního kontejneru injektáže závislostí, aby poskytovaly zaregistrovanou službu pro požadovaný typ.

Pokud nejsou zaregistrované žádné služby požadovaného typu, ASP.NET MVC očekává, že implementace tohoto rozhraní vrátí hodnotu null z GetService a vrátí prázdnou kolekci z GetServices.

Nová DependencyResolver třída umožňuje zaregistrovat třídy, které implementují nové rozhraní IDependencyResolver nebo rozhraní Common Service Locator (IServiceLocator). Další informace o Common Service Locator najdete v tématu CommonServiceLocator na GitHubu.

Nové rozhraní IViewActivator pro Fine-Grained vytváření instancí stránky zobrazení

Nové rozhraní IViewPageActivator poskytuje podrobnější kontrolu nad vytvářením instancí stránek zobrazení prostřednictvím injektáže závislostí. To platí pro instance WebFormView a RazorView instance. Následující příklad ukazuje nové rozhraní:

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

Tyto třídy nyní přijímají argument konstruktoru IViewPageActivator, který umožňuje použít injektáž závislostí k řízení způsobu vytváření instance typů ViewPage, ViewUserControl a WebViewPage.

Nová podpora překladače závislostí pro existující služby

Nová verze zahrnuje podporu řešení závislostí pro následující služby:

  • Zprostředkovatelé ověření modelu. Třídy, které implementují ModelValidatorProvider, lze zaregistrovat v překladače závislostí a systém je použije k podpoře ověřování na straně klienta a serveru.
  • Zprostředkovatel metadat modelu. Jedna třída, která implementuje ModelMetadataProvider lze zaregistrovat v překladač závislostí a systém ji použije k poskytování metadat pro šablony a systémy ověřování.
  • Zprostředkovatelé hodnot. Třídy, které implementují ValueProviderFactory, je možné zaregistrovat v překladači závislostí a systém je použije k vytvoření zprostředkovatelů hodnot, které jsou využívány kontrolerem a během vazby modelu.
  • Pořadače modelů. Třídy, které implementují IModelBinderProvider, lze zaregistrovat v překladači závislostí a systém je použije k vytvoření pořadačů modelu, které jsou využívány systémem vazby modelu.

Nová podpora nevtíravých ajax založených na jQuery

ASP.NET MVC zahrnuje pomocné metody Ajax, například následující:

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

Tyto metody používají JavaScript k vyvolání metody akce na serveru místo použití úplného postbacku. Tato funkce byla aktualizována tak, aby využívala výhod jQuery nenápadným způsobem. Místo rušivého generování vložených klientských skriptů tyto pomocné metody oddělují chování od značek generováním atributů HTML5 pomocí předpony data ajax . Chování se pak použije u značek odkazováním na příslušné soubory JavaScriptu. Ujistěte se, že jsou odkazy na následující soubory JavaScriptu:

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

Tato funkce je ve výchozím nastavení povolená v souboru Web.config v nových šablonách projektů ASP.NET MVC 3, ale pro existující projekty je ve výchozím nastavení zakázaná. Další informace najdete v části Přidání příznaků celé aplikace pro ověření klienta a nevtíravého JavaScriptu dále v tomto dokumentu.

Nová podpora nevtíravého ověřování jQuery

Ve výchozím nastavení ASP.NET MVC 3 Beta používá ověřování jQuery nevtíravým způsobem, aby bylo možné provést ověření na straně klienta. Pokud chcete povolit nenápadné ověření klienta, zavolejte v zobrazení následujícím způsobem:

Html.EnableClientValidation();

To vyžaduje, aby vlastnost ViewContext.UnobtrusiveJavaScriptEnabled byla nastavena na hodnotu true, což můžete provést následujícím voláním:

Html.EnableUnobtrusiveJavaScript();

Ujistěte se také, že jsou odkazy na následující soubory JavaScriptu.

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

Tato funkce je ve výchozím nastavení povolená v souboru Web.config v nových šablonách projektů ASP.NET MVC 3, ale pro existující projekty je ve výchozím nastavení zakázaná. Další informace najdete v části New application-wide flags for client validation and unobsive JavaScript dále v tomto dokumentu.

Nové Application-Wide příznaky ověřování klienta a nevtíravý JavaScript

Ověřování klienta a nevtíravý JavaScript můžete povolit nebo zakázat globálně pomocí statických členů třídy HtmlHelper, jako v následujícím příkladu:

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

Výchozí šablony projektů ve výchozím nastavení povolují nevtíravý JavaScript. Tyto funkce můžete také povolit nebo zakázat v kořenovém Web.config souboru vaší aplikace pomocí následujících nastavení:

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

Vzhledem k tomu, že tyto funkce můžete ve výchozím nastavení povolit, byla do třídy HtmlHelper zavedena nová přetížení, která umožňují přepsat výchozí nastavení, jak je znázorněno v následujících příkladech:

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

Kvůli zpětné kompatibilitě jsou obě tyto funkce ve výchozím nastavení zakázané.

Nová podpora kódu, který se spustí před spuštěním zobrazení

Teď můžete do adresáře Views vložit soubor s názvem _viewstart.cshtml (nebo _viewstart.vbhtml) a přidat do něj kód, který bude sdílen mezi více zobrazeními v daném adresáři a jeho podadresářích. Na stránku _viewstart.cshtml ve složce ~/Views můžete například vložit následující kód:

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

Tím se stránka rozložení nastaví pro každé zobrazení ve složce Zobrazení a ve všech jejích podsložkách rekurzivně. Při vykreslování zobrazení se kód v souboru _viewstart.cshtml spustí před spuštěním kódu zobrazení. Kód _viewstart.cshtml platí pro všechna zobrazení v této složce.

Ve výchozím nastavení platí kód v souboru _viewstart.cshtml také pro zobrazení v libovolné podsložce. Jednotlivé podsložky však mohou mít vlastní verzi souboru _viewstart.cshtml; v takovém případě má přednost místní verze. Pokud chcete například spustit kód, který je společný pro všechna zobrazení pro HomeController, vložte soubor _viewstart.cshtml do složky ~/Views/Home.

Nová podpora syntaxe VBHTML Razor

Předchozí ASP.NET MVC preview zahrnovala podporu zobrazení pomocí syntaxe Razor založené na jazyce C#. Tato zobrazení používají příponu souboru .cshtml. V rámci probíhajících prací na podpoře Razor zavádí ASP.NET MVC 3 Beta podporu syntaxe Razor v jazyce Visual Basic, který používá příponu souboru .vbhtml.

Úvod k používání syntaxe jazyka Visual Basic na stránkách VBHTML najdete v kurzu na následující adrese URL:

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

Podrobnější kontrola nad ValidateInputAttribute

ASP.NET MVC vždy obsahuje třídu ValidateInputAttribute, která volá základní infrastrukturu ASP.NET ověření požadavků, aby se zajistilo, že příchozí požadavek neobsahuje potenciálně škodlivý vstup. Ve výchozím nastavení je ověřování vstupu povolené. Ověření požadavku je možné zakázat pomocí atributu ValidateInputAttribute jako v následujícím příkladu:

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

Mnoho webových aplikací však má jednotlivá pole formuláře, která musí povolit html, zatímco zbývající pole by neměla. ValidateInputAttribute Třída nyní umožňuje zadat seznam polí, která by neměla být zahrnuta do ověření požadavku.

Pokud například vyvíjíte modul blogu, můžete chtít povolit revize v polích Text a Souhrn. Tato pole mohou být reprezentována dvěma vstupními elementy, z nichž každý má atribut name odpovídající názvu vlastnosti ("Body" a "Summary"). Chcete-li zakázat ověření žádosti pouze pro tato pole, zadejte názvy (oddělené čárkami) ve vlastnosti Exclude Třídy ValidateInput, jako v následujícím příkladu:

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

Pomocné rutiny převádějí podtržítka na spojovníky pro názvy atributů HTML zadané pomocí anonymních objektů

Pomocné metody umožňují určit páry název/hodnota atributu pomocí anonymního objektu, jako v následujícím příkladu:

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

Tento přístup neumožňuje používat spojovníky v názvu atributu, protože spojovník nelze použít pro název vlastnosti v ASP.NET. Nicméně, spojovníky jsou důležité pro vlastní HTML5 atributy; Například HTML5 používá předponu "data-".

Podtržítka nelze použít pro názvy atributů v HTML, ale jsou platná v názvech vlastností. Proto pokud zadáte atributy pomocí anonymního objektu a pokud názvy atributů obsahují podtržítko, pomocné metody převedou podtržítka na pomlčky. Například následující syntaxe pomocné rutiny používá podtržítko:

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

Předchozí příklad vykresluje následující kód při spuštění pomocné rutiny:

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

Opravy chyb

Výchozí šablona objektu pro pomocné rutiny šablony EditorFor a DisplayFor nyní podporuje řazení zadané v DisplayAttribute.Order vlastnost. (V předchozích verzích se nastavení Pořadí nepoužilo.)

Ověření klienta teď podporuje ověřování přepsaných vlastností s použitými ověřovacími atributy.

JsonValueProviderFactory je teď ve výchozím nastavení zaregistrovaný.

Zásadní změny

Pořadí provádění filtrů výjimek se změnilo pro filtry výjimek, které mají stejnou hodnotu Order. V ASP.NET MVC 2 a starších se filtry výjimek na kontroleru se stejným pořadím jako v metodě akce spustily před filtry výjimek pro metodu akce. Obvykle se jedná o případ, kdy filtry výjimek byly použity bez zadané hodnoty Order. V ASP.NET MVC 3 bylo toto pořadí obrácené tak, aby se jako první spustila nejkonsifičnější obslužná rutina výjimky. Stejně jako v předchozích verzích platí, že pokud je vlastnost Order explicitně zadána, filtry se spouštějí v zadaném pořadí.

Známé problémy

Během instalace se v dialogovém okně přijetí smlouvy EULA zobrazí licenční podmínky v okně, které je menší, než bylo zamýšleno.

Zobrazení Razor nepodporují Technologii IntelliSense ani zvýrazňování syntaxe. Předpokládá se, že podpora syntaxe Razor v sadě Visual Studio bude součástí pozdější verze.

Při úpravách zobrazení Razor (soubor CSHTML) nebude položka nabídky Přejít na kontroler v sadě Visual Studio dostupná a nejsou k dispozici žádné fragmenty kódu.

Při použití @model syntaxe k určení zobrazení CSHTML se silnými typy nejsou rozpoznány zástupce specifické pro jazyk pro typy. Například @model int nebude fungovat, ale @model Int32 bude fungovat. Alternativním řešením této chyby je použít při zadávání typu modelu skutečný název typu.

Při použití @model syntaxe k určení zobrazení CSHTML se silnými typy (nebo @ModelType k určení zobrazení VBHTML silného typu), typy s možnou hodnotou null a deklarace pole nejsou podporovány. Například @model int? se nepodporuje. Místo toho použijte @model Nullable<Int32>. Řetězec syntaxe @model [] také není podporován. Místo toho použijte @model IList<string>.

Při upgradu projektu ASP.NET MVC 2 na ASP.NET MVC 3 nezapomeňte do části appSettings souboru Web.config přidat následující:

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

Existuje známý problém, který způsobuje, že ověřování pomocí formulářů vždy přesměruje neověřené uživatele na ~/Account/Login a ignoruje nastavení ověřování formulářů použité v Web.config. Alternativním řešením je přidat následující nastavení aplikace.

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

Disclaimer

© 2011 Microsoft Corporation. All rights reserved. Tento dokument se poskytuje "tak, jak je". Informace a názory vyjádřené v tomto dokumentu, včetně adres URL a jiných internetových odkazů na web, se mohou změnit bez předchozího upozornění. Riziko spojené s jejich použitím nesete vy.

Tímto dokumentem nevzniká právní nárok na duševní vlastnictví produktů Microsoftu. Dokument můžete kopírovat a používat pro svou vnitřní potřebu nebo jako referenci.