ASP.NET 5.0 - MVC 6 - Microsoft Virtual Academy

Oui c'est un peu ... compliqué disons mais pour le framework C# .NET la nouvelle version est la version 5.0 après les versions 4.0, 4.5 puis 4.5.1 ... pour le module MVC, lui il est en version 6. Il est grand temps de découvrir toutes ces nouveautés car elles sont nombreuses et surprenantes.

DNX : le nouvel environnement d'exécution de .NET enfin du multi-plateforme ... Whaou !

Microsoft Virtual Académie

Découvrez la Communauté Alt.NET oui ils en parlent dans la vidéo mais je reviens ici quelques années après et plus rien impossible de retrouver les membres de la communauté Alt.NET comme quoi tout est périssable en ce bas monde !

Heureusement que ce n'est que du soft !

Mise à jour en 2022 Microsoft Virtual Academy devient  :Microsoft Learn

ASP.NET MVC & JQuery UI - Accordion

Je souhaite réaliser un "accordéon" en JQuery UI avec un template d'application ASP.NET MVC. Tout ce que je vois sur internet ne fonctionne pas. En tous cas pas avec le template de Visual Studio. Les applications ASP.NET MVC utilisées dans ces exemples, sont trop simples. Elles n'utilisent pas le template de Visual Studio.

Pourquoi JQuery UI ne fonctionne pas avec ASP.NET MVC ?

Ne pas oublier d'installer le NuGet JQuery UI :


L'instruction :
@Scripts.Render( "~/bundles/jquery" )

en bas de la page :
\\WebMvcApplication1\Views\Shared\_Layout.cshtml

Remponne avec l'instruction de la \\Views\Home\Page1.cshtml

@{
    ViewBag.Title = "Page1";
}

<script src="~/Scripts/jquery-1.6.4.js"></script>
<script src="~/Scripts/jquery-ui-1.11.4.js"></script>
<link href="~/Content/themes/base/all.css" rel="stylesheet" />
<link href="~/Content/themes/base/accordion.css" rel="stylesheet" />

<script type="text/javascript">
    $(function () {
        $("#accordion").accordion();
    });
</script>

<h2>Page1</h2>

<div id="accordion">
    <h3>This is the Title1</h3>
    <div>
        <p>
            Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
            ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
            amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
            odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
        </p>
    </div>
    <h3>This is the Title2</h3>
    <div>
        <p>
            Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
            purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
            velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
            suscipit faucibus urna.
        </p>
    </div>
</div>

Solution pour utiliser JQuery UI dans les page ASP.NET MVC

Déplacer l'instruction :
@Scripts.Render( "~/bundles/jquery" )

de la page : \\WebMvcApplication1\Views\Shared\_Layout.cshtml
dans les balises <head> au début de la page. Comme ceci :

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - Mon application ASP.NET</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render( "~/bundles/jquery" )
</head>

Supprimer l'instruction :
<script src="~/Scripts/jquery-1.6.4.js"></script>
de la page \\Views\Home\Page1.cshtml

Et ça y est, ça fonctionne :

J'ai ajouté une page dans laquelle j'utilise l'accordion JQuery UI

L'accordion JQuery UI s'affiche dans ma page ASP.NET MVC
Incroyable non ? N'est ce pas de la magie !

Have Fun !
 

ASP.NET 5 - Nouveautés

Connaissez-vous les nouveautés d'ASP.NET 5 ? Doit-on dire .NET Framework 5.0 ? Qu'est ce qui change ? Qu'est ce qui reste identique ?

La vidéo sur Microsoft Virtual Academy - Initiation à ASP.NET 5

Connaissez-vous le nouvel éditeur de code : Visual Studio Code ?
https://www.visualstudio.com/en-us/products/code-vs.aspx
A découvrir ...

ASP.NET 5

Visual Studio 2015 - MVC 6. Tout change encore, Razor @Html.LabelFor devient un htmlHelper <label asp.net.for="">. Une même application pourra faire tourner tous types de contrôleurs WebAPI MVC Json .... Plus de Global.asax remplacé par ...  Bref : ASP.NET 5, ils sont parti d'une page blanche.

Mais ... mais ... mais ... attention !

Enfin un environnement Multiplateforme : DNX le nouvel environnement d'exécution ! Multiplateforme !? Oui oui ça y est, nous y sommes.

Mise à jour en Mars 2017

Il semble que tout ceci soit maintenant connu sous la dénomination : ASP.NET Core Runtime

ASP.NET MVC Scaffolding

C'est la suite de l'article : ASP.NET MVC 4 CRUD With Entiry Framework 5.0 sur l'utilisation du NuGet Packadge ASP.NET MVC Scaffolding. Je viens de tout recommencer avec Visual Studio 2013. Je sais, je suis un dangereux récidiviste ;)

Regardons si ça fonctionne encore ?

Afficher la fenêtre console de gestion des packages NuGet

C'est ici :
Affichez la console de gestion des packages NugGet

Lancer la commande d'installation de ASP.NET Scaffolding

Voici le résultat de résulat d'exécution de la commande :
PM> install-package mvcscaffolding

Chaque package vous est concédé sous licence par son propriétaire. Microsoft n’est pas responsable et n’accorde pas de licence pour les packages de sociétés tierces. Certains packages peuvent inclure des dépendances qui sont soumises à des contrats de licence supplémentaires. Suivez l’URL de la source du package (flux) pour identifier les dépendances.

Version de l’hôte de la Console du Gestionnaire de package 2.8.50926.663

Tapez « get-help NuGet » pour afficher toutes les commandes NuGet disponibles.

PM> install-package mvcscaffolding
Tentative de résolution de la dépendance « T4Scaffolding ».
Tentative de résolution de la dépendance « T4Scaffolding.Core ».
Tentative de résolution de la dépendance « EntityFramework ».
Installation de « T4Scaffolding.Core 1.0.0 ».
Installation de « T4Scaffolding.Core 1.0.0 » terminée.
Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\T4Scaffolding.Core.1.0.0\tools\init.ps1 : 50 Caractère : 30
+         Set-DefaultScaffolder <<<<  -Name CustomTemplate -Scaffolder T4Scaffolding.CustomTemplate -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\T4Scaffolding.Core.1.0.0\tools\init.ps1 : 51 Caractère : 30
+         Set-DefaultScaffolder <<<<  -Name CustomScaffolder -Scaffolder T4Scaffolding.CustomScaffolder -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Installation de « T4Scaffolding 1.0.8 ».
Installation de « T4Scaffolding 1.0.8 » terminée.
Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\T4Scaffolding.1.0.8\tools\init.ps1 : 6 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name DbContext -Scaffolder T4Scaffolding.EFDbContext -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\T4Scaffolding.1.0.8\tools\init.ps1 : 7 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name Repository -Scaffolder T4Scaffolding.EFRepository -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Installation de « MvcScaffolding 1.0.9 ».
Installation de « MvcScaffolding 1.0.9 » terminée.
Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\MvcScaffolding.1.0.9\tools\init.ps1 : 47 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name Controller -Scaffolder MvcScaffolding.Controller -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\MvcScaffolding.1.0.9\tools\init.ps1 : 48 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name Views -Scaffolder MvcScaffolding.Views -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\MvcScaffolding.1.0.9\tools\init.ps1 : 49 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name Action -Scaffolder MvcScaffolding.Action -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\MvcScaffolding.1.0.9\tools\init.ps1 : 50 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name UnitTest -Scaffolder MvcScaffolding.ActionUnitTest -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
Au niveau de E:\Visual Studio\ApplicationWeb\WebMVCApplicationKit\packages\MvcScaffolding.1.0.9\tools\init.ps1 : 54 Caractère : 22
+ Set-DefaultScaffolder <<<<  -Name View -Scaffolder $viewScaffolder -SolutionWide -DoNotOverwriteExistingSetting
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Ajout de « T4Scaffolding.Core 1.0.0 » à WebApplicationKit.
Ajout réussi de « T4Scaffolding.Core 1.0.0 » à WebApplicationKit.
Ajout de « T4Scaffolding 1.0.8 » à WebApplicationKit.
Ajout réussi de « T4Scaffolding 1.0.8 » à WebApplicationKit.
Ajout de « MvcScaffolding 1.0.9 » à WebApplicationKit.
Ajout réussi de « MvcScaffolding 1.0.9 » à WebApplicationKit.

ASP.NET Scaffolding Installation Conclusion

C'est difficile à dire ?! On dirait que certaines choses se passent @=+}}# Grrrrrrrr
Mais d'autres plantent ... Tentons d'utiliser le package.

Utiliser le module ASP.NET Scaffolding

J'ai le modèle données suivant :
Modèle de donner à Scaffolder
Je lance donc la commande suivante :

PM>Scaffold Controller FOPBooksController –force –DBContextType “ModelContainer”

Et j'espère voir les éléments se créer mais non, ça ne fonctionne plus ....

PM> scaffold controller FOPBooksController –force –DBContextType “ModelContainer”
Invoke-Scaffolder : Impossible de trouver un paramètre positionnel acceptant l'argument « FOPBooksController ».
Au niveau de ligne : 1 Caractère : 9
+ scaffold <<<<  controller FOPBooksController –force –DBContextType “ModelContainer”
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Scaffolder], ParameterBindingException

    + FullyQualifiedErrorId : PositionalParameterNotFound,T4Scaffolding.Cmdlets.InvokeScaffolderCmdlet

MvcScaffolding 1.0.9 ne fonctionne plus

Cela ne fonctionne plus ! J'en était sûr, le module est encore là sur le site de nuget.org

https://www.nuget.org/packages/MvcScaffolding/

Mais plus rien ne fonctionne, pensez l'auteur n'a rien publié depuis Monday, October 08 2012.

Oups ! En y regardant de plus prêt si il y a MvcScaffolding 1.0.8-vs2013
...

MvcScaffolding -Version 1.0.8-vs2013 -Pre

Ben je vais essayer la commande :

PM>Install-Package MvcScaffolding -Version 1.0.8-vs2013 -Pre

Alors, mauvaise organisation du site ... perte de temps ? Certainement !?

Mais ça ne fonctionne pas mieux ! J'en était sûr des packages ne sont plus maintenus et c'est la cata. Je ne vous raconte pas comment VS s'est craché lors des multiples install uninstall de ce package. Franchement c'est pas pro, dommage.

Ne fonctionne pas non plus !

En cherchant un peu :

http://stackoverflow.com/questions/19081028/scaffolding-controllers-with-repositories-in-mvc5-ef6-visualstudio-2013

http://stackoverflow.com/questions/18727299/is-mvcscaffolding-compatible-with-vs-2013-rc-by-command-line

Plus de doute, cela ne fonctionnera plus ... snif !

Et en cherchant encore un peu plus 

J'ai exécuté la commande :
PM> Install-Package Microsoft.AspNet.Mvc.ScaffolderTemplates.AttributeRouting.CSharp

Conclusion

Le package Scaffolding est maintenant "build-in" dans le framework MVC, c'est à dire absorbé par Microsoft dans le framework.

C'est ce que l'on peut comprendre en lisant l'article suivant :

https://code.msdn.microsoft.com/MVC5-Demo-with-Entity-c6bc81df
ASP.NET MVC 5 – CRUD operations with Entity Framework 6 on Visual Studio 2013

La nouvelle commande magique se trouve maintenant (en français) dans :
Dans l'Explorateur de solutions->bouton droit sur le projet ou le dossier "Models" par exemple puis ->Ajouter->Nouvel élément structuré ...