<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Hinault Romaric Donfack &#187; WebPages</title>
	<atom:link href="https://blog.developpez.com/lilroma/pcategory/net/asp-net/webpages/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/lilroma</link>
	<description>Bienvenue sur ce blog. Vous y trouverez du .NET, du .NET...  encore du .NET, toujours du .NET et très peu de chose sur moi</description>
	<lastBuildDate>Sat, 27 Aug 2016 14:24:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>« ASP.NET et Web Tools 2012.2 » sort en RC, avec de nouvelles fonctionnalités pour WebForms, MVC, WebAPI et SignalR</title>
		<link>https://blog.developpez.com/lilroma/p11585/net/asp-net-et-web-tools-2012-2-sort-en-rc-avec-de-nouvelles-fonctionnalites-pour-webforms-mvc-webapi-et-signalr</link>
		<comments>https://blog.developpez.com/lilroma/p11585/net/asp-net-et-web-tools-2012-2-sort-en-rc-avec-de-nouvelles-fonctionnalites-pour-webforms-mvc-webapi-et-signalr#comments</comments>
		<pubDate>Tue, 18 Dec 2012 16:51:09 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC 4]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/lilroma/?p=104</guid>
		<description><![CDATA[« ASP.NET et Web Tools 2012.2 » sort en RC, avec de nouvelles fonctionnalités pour WebForms, MVC et WebAPI Le Web évolue rapidement, et Microsoft est conscient de cela. L’éditeur a ainsi adopté un cycle de mise à jour pour &#8230; <a href="https://blog.developpez.com/lilroma/p11585/net/asp-net-et-web-tools-2012-2-sort-en-rc-avec-de-nouvelles-fonctionnalites-pour-webforms-mvc-webapi-et-signalr">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>« ASP.NET et Web Tools 2012.2 » sort en RC, avec de nouvelles fonctionnalités pour WebForms, MVC et WebAPI </p>
<p>Le Web évolue rapidement, et Microsoft est conscient de cela. L’éditeur a ainsi adopté un cycle de mise à jour pour ASP.NET plus rapide que celui de Visual Studio.</p>
<p>La société compte donc publier une mise à jour pour sa plateforme de développement Web ASP.NET en début d’année prochaine.</p>
<p>Les développeurs qui veulent commencer à « jouer » avec les nouvelles fonctionnalités de cette mise à jour peuvent déjà télécharger sa version Release Candidate (RC) qui vient d’être publiée par les équipes  ASP.NET et Visual Web Developer de Microsoft.</p>
<p><img src="http://rdonfack.developpez.com/images/aspnevnext.png" alt="" /></p>
<p><span id="more-104"></span></p>
<p>« ASP.NET et Web Tools 2012.2 » RC étend le runtine ASP.NET existant et ajout de nouveaux outils Web à Visual Studio 2012 pour WebForms, MVC, WebAPI, etc. Il s’agit des fonctionnalités suivantes :</p>
<ol>
<li>De nouveaux modèles de projets ASP.NET MVC. la création d’applications Facebook est désormais plus facile avec le modèle Facebook, qui permet en quelques étapes de créer une application qui interagir avec le réseau social. Le nouveau modèle « Single Page Application » permet aux développeurs de créer des applications Web interactives côté client à l’aide de jQuery, Knockout et ASP.NET Web API ;</li>
<li>Le support de la communication en temps réel avec ASP.NET SignalR. SignalR est une bibliothèque client/serveur qui permet aux clients basés sur un navigateur et aux composants serveur basés sur ASP.NET d&rsquo;avoir une conversation à étapes multiples et bidirectionnelle;</li>
<li>Le support de l’IntelliSense pour Knockout  et l’ajout de la prise en charge de JSON en tant que classe ;
</li>
<li>L’introduction de nouvelles fonctionnalités pour ASP.NET Web API, y compris le support d’OData, l’ajout des fonctions de traçabilité, de monitoring et  de génération d’une page d’aide pour une API Web;</li>
<li>Des améliorations de l’inspecteur de page, qui offre désormais de meilleures performances pour JavaScript et CSS, dont la capacité de voir les mises à jour en temps réel d’un fichier CSS ;</li>
<li>L’unification de l’expérience de publication pour une application Web et un projet de type site Web, ainsi que l’ajout des options de publication sélective ;</li>
<li>L’intégration de la nouvelle fonctionnalité ASP.NET Friendly URL. Cette fonction rend facile la génération des URL sans l’extension .aspx. Elle permet également au développeur d’ajouter plus facilement le support du mobile dans son application Web ;</li>
<li>La mise à jour des modèles de projets Web dans Visual Studio 2012.</li>
</ol>
<p>Cette mise à jour est livrée comme des packages NuGet supplémentaires. Ce qui signifie qu’il ne peut avoir aucun problème de compatibilité avec les projets existants.</p>
<p><strong><a href="http://www.asp.net/vnext">Télécharger &laquo;&nbsp;ASP.NET et Web Tools 2012.2&Prime; RC</a></strong></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 : améliorer le temps de chargement des pages Web en utilisant le regroupement et la minification du CSS et JavaScript</title>
		<link>https://blog.developpez.com/lilroma/p11221/net/webmatrix_2_ameliorer_le_temps_de_charge</link>
		<comments>https://blog.developpez.com/lilroma/p11221/net/webmatrix_2_ameliorer_le_temps_de_charge#comments</comments>
		<pubDate>Wed, 15 Aug 2012 01:57:48 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Lorsque je travaille sur une application Web, quelque soit la taille, le langage et les outils que j’utilise, le temps de chargement de mes pages représente un élément auquel j’accorde beaucoup d’importance. Plus le chargement des pages du site est &#8230; <a href="https://blog.developpez.com/lilroma/p11221/net/webmatrix_2_ameliorer_le_temps_de_charge">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lorsque je travaille sur une application Web, quelque soit la taille, le langage et les outils que j’utilise, le temps de chargement de mes pages représente un élément auquel j’accorde beaucoup d’importance. Plus le chargement des pages du site est rapide, plus l’expérience de navigation est fluide et plus les clients sont contents.</p>
<p>Pour optimiser le temps le chargement d’une page, on peut avoir recours à plusieurs techniques côté client et côté serveur dont la mise en cache, l’utilisation d’un CDN ou encore la compression et la minification du CSS et JavaScript.</p>
<p>Dans ce billet de blog, je vais montrer comment vous pouvez grandement améliorer le temps de chargement des pages de votre site Web en minifiant et en regroupant vos fichiers JavaScript et CSS grâce à la bibliothèque ASP. NET Optimization &#8211; Bundling.</p>
<p><img src="http://blog.developpez.com/media/minification.png" alt="" title="" /></p>
<p><span id="more-60"></span></p>
<p>Le regroupement et la minification sont des procédés de réduction de la taille des fichiers en les combinant, et en supprimant les espaces et autres caractères inutiles. Ces méthodes permettent de rendre l’exécution d’une page Web plus rapide avec le moins de demandes de chargement des fichiers.</p>
<p>Pour commencer, vous allez créer une nouvelle application ASP.NET WebPages avec WebMatrix en utilisant le modèle de projet Starter Site. </p>
<p>Comme l’illustre l’image ci-dessous, vous constatez que votre application contient par défaut un nombre déjà assez important de fichiers JavaScript et CSS.</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle1_01.PNG" width="528" height="352" alt="" /></p>
<p>Si vous exécutez votre application et que vous analysez les performances de votre page d’index avec un outil comme Yslow, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle2.PNG" width="680" height="349" alt="" /></p>
<p><strong>Ajout de la bibliothèque ASP.NET Optimization &#8211; Bundling</strong></p>
<p>WebMatrix 2 apporte comme nouveauté phare l’intégration du gestionnaire de packages open source .NET NuGet. Dans la boite à outil de l’EDI, une nouvelle icone NuGet est disponible, permettant d’accéder à l’interface des gestions des packages de votre application. Cliquez sur ce bouton.</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle3.jpg" width="267" height="205" alt="" /></p>
<p>L’interface de gestion des packages de NuGet s’affiche. Pour plus de détail sur son utilisation, lire mon article sur <a href="http://blog.developpez.com/lilroma/p10639/">l’intégration du gestionnaire d’extensions et de NuGet dans WebMatrix 2</a>.</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle4.PNG" width="699" height="504" alt="" /></p>
<p>Dans la zone de recherche, tapez le nom de la bibliothèque «  Microsoft.Web.Optimization », sélectionnez le package ASP.NET Optimization – Bundling, et cliquez sur Installer. </p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle5.PNG" width="697" height="268" alt="" /></p>
<p>La fenêtre contenant les termes de la licence va s’afficher. Cliquez sur j’accepte pour lancer l’installation du package dans votre application. A la fin de l’installation, si vous ouvrez le dossier Bin de votre application, vous verrez la présence d’un nouveau fichier Microsoft.Web.Optimization.dll.</p>
<p><strong>Activation du Bundling</strong></p>
<p>Grâce à NuGet, nous avons intégré sans difficulté la bibliothèque dont nous avons besoins dans notre application. Voyons maintenant comment nous pouvons activer le regroupement et la minification du CSS et JavaScript.</p>
<p>Pour cela, ouvrez le fichier _AppStart.cshtml et inserez la ligne de code suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">BundleTable.Bundles.EnableDefaultBundles();</pre>
<p></div>
<p>N’oubliez pas d’ajouter une référence à Microsoft.Web.Optimization.</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@<span style="color: #0000ff;">using</span> Microsoft.Web.Optimization</pre>
<p></div>
<p>Tous les fichiers JavaScript contenus dans le répertoire Scripts (les sous dossiers ne sont pas pris en compte) de votre application seront regroupés, compressés et traités comme un seul fichier. Ces fichiers seront regroupés par défaut dans un dossier Scripts. Ils seront désormais référencés en utilisant la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;script src=<span style="color: #006080;">"~/Scripts/js"</span> type=<span style="color: #006080;">"text/javascript"</span>&gt;&lt;/script&gt;</pre>
<p></div>
<p>De même, les fichiers CSS contenus dans le répertoire Content seront également compactés par défaut dans un dossier Content. Ils seront référencés en utilisant la ligne de code suivante :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;link href=<span style="color: #006080;">"/Content/css"</span> rel=<span style="color: #006080;">"stylesheet"</span> type=<span style="color: #006080;">"text/css"</span> /&gt;</pre>
<p></div>
<p>Après avoir appliqué ces modifications, exécutez à nouveau votre application. Vous allez obtenir  le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle6.PNG" width="575" height="356" alt="" /></p>
<p>En comparant les deux images, vous vous rendez compte que le nombre de requêtes HTTP sur votre page est passé de 30 à 10.  Les cinq fichiers JavaScript ont été regroupés en 1 fichier et les 16 feuilles de styles ont été combinés en 1 fichier.</p>
<p>De même, la taille des fichiers JavaScript est passée de 558,9 Ko à 375,1 Ko. C’est déjà pas mal. Mais, on aurait pu faire mieux, car plusieurs fichiers dans le dossier Scripts qui ont été regroupés n’ont pas été utilisés. C’est à ce niveau qu’intervient le Bundle personnalisé.</p>
<p><strong>Bundle personnalisé</strong></p>
<p>Avec cette option, vous avez la liberté dans le choix des fichiers qui seront dans un regroupement, ainsi que l’URL qu’aura le regroupement. À ce stade, le choix des dossiers de regroupement doit être fonction de la récurrence des fichiers JavaScript et CSS dans les pages de votre application.<br />
Vous pouvez définir vos regroupements personnalisés en procédant comme suit dans le fichier_çAppStart.cshtml.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 400px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">BundleTable.Bundles.EnableDefaultBundles();<br /> <br />    var jsBundle = <span style="color: #0000ff">new</span> Bundle(<span style="color: #006080">&quot;~/Scripts&quot;</span>, <span style="color: #0000ff">typeof</span>(JsMinify));<br />    <br />    jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/jquery-ui-1.8.11.js&quot;</span>);<br />    jsBundle.AddFile(<span style="color: #006080">&quot;~/Scripts/modernizr-2.0.6-development-only.js&quot;</span>);<br />   <br /> <br />    BundleTable.Bundles.Add(jsBundle);<br /> <br />    Bundle cssBundle = <span style="color: #0000ff">new</span> Bundle(<span style="color: #006080">&quot;~/Styles&quot;</span>, <span style="color: #0000ff">typeof</span>(CssMinify));<br />    cssBundle.AddFile(<span style="color: #006080">&quot;~/content/site.css&quot;</span>);<br />    cssBundle.AddFile(<span style="color: #006080">&quot;~/content/themes/base/jquery.ui.all.css&quot;</span>);<br /> <br />    BundleTable.Bundles.Add(cssBundle); </pre>
<p></div>
<p>Vous allez désormais référencer ces regroupements dans votre page comme suit :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;link href=<span style="color: #006080;">"~/Styles"</span> rel=<span style="color: #006080;">"stylesheet"</span> type=<span style="color: #006080;">"text/css"</span> /&gt;<br />&lt;script src=<span style="color: #006080;">"~/Scripts"</span> type=<span style="color: #006080;">"text/javascript"</span>&gt;&lt;/script&gt;  </pre>
<p></div>
<p>En exécutant la page précédente de votre application, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/Webmatrixbundle7.png" width="565" height="313" alt="" /> </p>
<p>Et voilà, la taille de vos fichiers JavaScript passe de 558,9K à 5,7K, soit un taux de compression de près de 98 %.<br />
Vous pouvez également ajouter à votre regroupement tous les fichiers JavaScript d’un répertoire précis en procédant comme suit :</p>
<p>Et voilà, vous pouvez désormais améliorer assez simplement le temps de chargement des pages de votre application JavaScript grâce à la bibliothèque ASP. NET Optimization – Bundling.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 RC disponible</title>
		<link>https://blog.developpez.com/lilroma/p11100/net/webmatrix_2_rc_disponible</link>
		<comments>https://blog.developpez.com/lilroma/p11100/net/webmatrix_2_rc_disponible#comments</comments>
		<pubDate>Mon, 18 Jun 2012 01:12:04 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans la foulée des sorties de Visual Studio 2012 RC, Windows 8 Preview et le nouveau Windows Azure, Microsoft a également publié la Release Candidate de WebMatrix 2. Pour rappel, WebMatrix est un environnement de développement Web léger « tout-en-un &#8230; <a href="https://blog.developpez.com/lilroma/p11100/net/webmatrix_2_rc_disponible">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans la foulée des sorties de Visual Studio 2012 RC, Windows 8 Preview et le nouveau Windows Azure, Microsoft a également publié la Release Candidate de WebMatrix 2.</p>
<p>Pour rappel, WebMatrix est un environnement de développement Web léger « tout-en-un », robuste et surtout gratuit, développé par Microsoft. </p>
<p>Cette mouture qui marque une étape importante dans le cycle de développement de l’EDI s’aligne avec la vision de Microsoft : fédérer l’ensemble de la pile Web et des outils dont les développeurs ont besoin pour créer des applications Web au sein d’un outil.</p>
<p><img src="http://blog.developpez.com/media/webmatrixnode.png" width="556" height="292" alt="" /></p>
<p><span id="more-59"></span></p>
<p>WebMatrix 2 RC s’arrime au développement mobile en proposant des outils permettant de mettre sur pied facilement des applications Web Mobiles. Les modèles pour ASP.NET, Node.js et PHP ont été mis à jour pour être plus mieux adaptés pour un affichage sur les terminaux mobiles.  Le rendu des vus spécifiques en fonction des dispositifs (Tablette, iPhone, Windows Phone, etc..) est désormais possible.</p>
<p>L’EDI dispose par défaut des émulateurs allégés pour Windows Phone, iPad et iPhone, permettant d’avoir un aperçu rapide du fonctionnement de son site Web sur ces dispositifs. Des travaux sont en cours pour intégrer encore plus d’émulateurs.</p>
<p>Le support de JQuery Mobile est également au rendez-vous (auto-complexion, etc.). Plusieurs modèles de projets mobiles reposent sur la bibliothèque JavaScript.</p>
<p>La complexion de code pour HTML5, CSS3, JQuery est au menu. L’EDI repose sur la version 2 de WebPages qui dispose d’un nombre assez intéressant d’améliorations par rapport à la version 1.  Le support de Node.js est également au centre de la RC de WebMatrix 2, qui propose de nouveaux modèles de projets, l’IntelliSense pour Node.js et la coloration de code pour Jade/EJS. </p>
<p>WebMatrix 2 RC offre un support encore plus étroit de Windows Azure, la plateforme Cloud de Microsoft.  	  </p>
<p>WebMatrix 2 RC dispose d’un nombre assez impressionnant de nouvelles fonctionnalités par rapport à la bêta. Je viens à peine de commencer à jouer avec ces nouveautés, et je peux dire que je suis déjà assez impressionné et captivé par cet EDI que j’ai adopté depuis la sortie de la première version.<br />
Je reviendrais sur certains de mes billets de blog sur les nouveautés qui auront le plus attiré mon attention au fur et à mesure que je découvrir cette RC de WebMatrix 2.</p>
<p>&#8211; <strong><a href="http://aka.ms/webmatrix2blog">Télécharger WebMatrix 2 RC</a></strong></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Tutoriel]Création d’une application CRUD avec WebMatrix, Razor et Entity Framework</title>
		<link>https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud</link>
		<comments>https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud#comments</comments>
		<pubDate>Mon, 14 May 2012 10:00:56 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Salut, Les cinq articles de blog qui présentaient pas à pas comment créer une application CRUD avec WebMatrix, Razor et Entity Framework ont été regroupés en un seul tutoriel qui vient d’être publié sur Developpez.com. J&#8217;ai eu à développer récemment &#8230; <a href="https://blog.developpez.com/lilroma/p11023/net/tutoriel_creation_d_une_application_crud">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Salut,</p>
<p> Les cinq articles de blog qui présentaient pas à pas comment créer une application CRUD avec WebMatrix, Razor et Entity Framework ont été regroupés en un seul tutoriel qui vient d’être publié sur Developpez.com.</p>
<blockquote><p>J&rsquo;ai eu à développer récemment une application CRUD avec WebMatrix. Utilisant principalement la classe DataBase de l&rsquo;espace de nom Microsoft.Data pour la manipulation des données, lorsque j&rsquo;ai aperçu Entity Framework dans les packages NuGet avec WebMatrix 2 bêta, je me suis dit &laquo;&nbsp;génial&nbsp;&raquo; ! Ça veut dire que je peux l&rsquo;utiliser dans ma solution.</p>
<p>J&rsquo;ai donc opté pour l&rsquo;utilisation de la bibliothèque au sein de mon application WebMatrix. Entity Framework est en passe de devenir un standard pour la manipulation des données et est recommandé par Microsoft.</p>
<p>Contrairement à Visual Studio et ASP.NET ou l&rsquo;on dispose de plusieurs outils rendant facile la conception d&rsquo;une application CRUD avec Entity Framework, sur WebMatrix, c&rsquo;est un peu compliqué et l&rsquo;on ne dispose pas des fonctionnalités comme l&rsquo;échafaudage, et encore moins des ressources sur Internet.</p>
<p>C&rsquo;est pourquoi j&rsquo;ai décidé de fournir au travers de cet article une démarche pas à pas avec autant de détails que possible pour la conception d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>Le lecteur, tout au long de ce tutoriel, pourra se familiariser avec WebMatrix, Razor, Entity Framework, le gestionnaire de packages open source .NET NuGet pour WebMatrix et le gestionnaire de base de données SQL Server Compact Edition.</p>
<p>Cet article est essentiellement destiné aux débutants. Aucun prérequis n&rsquo;est donc nécessaire pour sa bonne compréhension. Il est néanmoins préférable d&rsquo;avoir des connaissances de base en programmation orientée objet avec C# et d&rsquo;être familiarisé avec WebMatrix et Razor. Si ce n&rsquo;est pas le cas, je vous conseille de lire dans un premier temps mon tutoriel de présentation de WebMatrix, ainsi que mon tutoriel sur Razor.</p></blockquote>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/">Consulter le tutoriel complet</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp.pdf">Télécharger la version PDF</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp.zip">Télécharger la version hors-ligne</a></p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/webmatrixcrudapp-ebooks.zip">Télécharger la version eBook</a></p>
<p> &#8211; Télécharger le code source de l&rsquo;application d&rsquo;exemple :</p>
<p>          . <img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.rar">Version RAR</a></p>
<p>          . <img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.zip">Version ZIP</a></p>
<p>&#8211; <a href="http://www.developpez.net/forums/showthread.php?t=1214877">Pour les commentaires c&rsquo;est par ici </a></p>
<p><strong>Bonne lecture</strong> <img src="https://blog.developpez.com/lilroma/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 3 : création du DBContext et du Repository</title>
		<link>https://blog.developpez.com/lilroma/p10896/net/creation_d_une_application_crud_avec_web_2</link>
		<comments>https://blog.developpez.com/lilroma/p10896/net/creation_d_une_application_crud_avec_web_2#comments</comments>
		<pubDate>Sat, 31 Mar 2012 10:33:30 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. &#8211; Part 1 : introduction et présentation des outils &#8211; Part 2 : création de l&#8217;application &#8230; <a href="https://blog.developpez.com/lilroma/p10896/net/creation_d_une_application_crud_avec_web_2">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p> &#8211; Part 1 : <a href="http://blog.developpez.com/lilroma/p10870/">introduction et présentation des outils</a></p>
<p> &#8211; Part 2 : <a href="http://blog.developpez.com/lilroma/p10876/">création de l&rsquo;application et définition du modèle objet</a></p>
<p>Dans les parties précédentes, nous nous sommes familiarisés avec les outils que nous allons utiliser, et nous avons par la suite procédé à la création de l’application et à la définition du modèle objet qui sera utilisé.</p>
<p>Cette partie portera sur la création du DbContext, la définition de la chaine de connexion dans le fichier Web.Config, la création de la base de données à partir du modèle objet et afin la définition du Repository qui sera utilisé.</p>
<p><span id="more-55"></span></p>
<p><strong>Création du DBContex</strong></p>
<p>Nous allons maintenant créer la classe qui va s’occuper de gérer la communication entre les classes entités et la base de données.  Cette classe va hériter de la classe DbContext.</p>
<p>La classe DbContext expose les fonctionnalités les plus couramment utilisées pour interroger et puis utiliser les données d’entité en tant qu’objet.</p>
<p>Vous allez ajouter au dossier App_Code un nouveau fichier de classe  ayant pour nom « WebMatrixCrudApp.Context.cs ».</p>
<p>Dans ce fichier, vous allez ajouter une nouvelle classe « WebMatrixCrudAppContext » qui hérite de DbContext.</p>
<p>Cette classe doit contenir trois attributs DbSet fortement typés correspondants à vos différentes entités.  Les attributs DbSet vont permettre de gérer la correspondance avec les tables de la base de données.</p>
<p>Dans ce fichier, vous aurez le code suivant :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">using</span> System;<br /><span style="color: #0000ff">using</span> System.Data.Entity;<br /><br /><span style="color: #008000">/// &lt;summary&gt;</span><br /><span style="color: #008000">/// Summary description for ClassName</span><br /><span style="color: #008000">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> WebMatrixCrudAppContext : DbContext <br />{<br />    <span style="color: #0000ff">public</span> DbSet&lt;Personne&gt; Personnes { get; set; }<br />    <span style="color: #0000ff">public</span> DbSet&lt;Organisme&gt; Organismes {get; set; }<br />    <span style="color: #0000ff">public</span> DbSet&lt;Affiliation&gt; Affiliations {get; set; }<br />    <br />}<br /></pre>
<p></div>
<p>La prochaine étape sera l’ajout de la chaine de connexion pour le mode Code First d’Entity Framework dans le fichier Web.config.</p>
<p>Pour cela, doublez cliquez sur le fichier Web.config dans l’explorateur de solution et ajoutez les lignes de code suivantes à celui-ci :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">connectionStrings&gt;<br />        &lt;add name=<span style="color: #006080;">"WebMatrixCrudAppContext"</span> connectionString=<span style="color: #006080;">"Data Source=|DataDirectory|WebMatrixCrudApp.sdf"</span> <br />             providerName=<span style="color: #006080;">"System.Data.SqlServerCe.4.0"</span> /&gt;<br />    &lt;/connectionStrings&gt;</pre>
<p></div>
<p>Le nom de la chaîne de connexion doit être celui de votre classe DbContext (WebMatrixCrudAppContext) </p>
<p>Le fichier XML de configuration de votre application doit ressembler à ceci :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;?xml version=<span style="color: #006080">&quot;1.0&quot;</span> encoding=<span style="color: #006080">&quot;utf-8&quot;</span>?&gt;<br />&lt;configuration&gt;<br />  &lt;system.web&gt;<br />    &lt;compilation&gt;<br />      &lt;assemblies&gt;<br />        &lt;add assembly=<span style="color: #006080">&quot;System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;</span> /&gt;<br />      &lt;add assembly=<span style="color: #006080">&quot;System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&quot;</span> /&gt;&lt;/assemblies&gt;<br />    &lt;/compilation&gt;<br />  &lt;/system.web&gt;<br />    &lt;connectionStrings&gt;<br />        &lt;add name=<span style="color: #006080">&quot;WebMatrixCrudAppContext&quot;</span> connectionString=<span style="color: #006080">&quot;Data Source=|DataDirectory|WebMatrixCrudApp.sdf&quot;</span> <br />             providerName=<span style="color: #006080">&quot;System.Data.SqlServerCe.4.0&quot;</span> /&gt;<br />    &lt;/connectionStrings&gt;<br />&lt;/configuration&gt;<br /></pre>
<p></div>
<p>Procédez à l’exécution de votre application en cliquant sur le bouton « Run » et sélectionnez le navigateur de votre choix dans la boite d’outils.</p>
<p>La base de données SQL Server Compact « WebMatrixCrudApp.sdf » sera automatiquement créée dans le dossier App_data de votre application.</p>
<p>En sélectionnant l’espace de données Databases, vous pouvez constater qu’une nouvelle base de données a été ajoutée à votre application. </p>
<p><img src="http://blog.developpez.com/media/createdatabase.PNG" width="827" height="549" alt="" /></p>
<p>En observant cette base de données, vous vous  rendez compte que les tables qui ont été créées correspondent aux propriétés DbSet de la  classe WebMatrixCrudAppContext.<br />
On remarque également que la taille des colonnes Nom et Prenom par exemple de la table Personnes  est la même que celle que vous avez défini dans la classe Personne avec l’attribut [MaxLengthAttribute(50)]</p>
<p>En sélectionnant la table Affiliations et en cliquant sur la commande View de la zone Relationships, vous constatez également que les relations de clés étrangères qui ont été définies pour la classe Affiliation ont été créées.</p>
<p><img src="http://blog.developpez.com/media/RelationShips.PNG" width="826" height="548" alt="" /></p>
<p>En cliquant par exemple sur la relation Affiliation_Organisme, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/CreateNewRelation.PNG" width="486" height="439" alt="" /></p>
<p>Une table supplémentaire EdmMataData a été ajoutée dans votre base de données. Cette table permet à Entity Framework Code First de savoir si le modèle utilisé pour créer une base de données est le même que celui qui est utilisé pour accéder à cette base de données (avec la version 4.3 d’EF cette table n’est plus créée).</p>
<p>Dans le cas au vous apportez des modifications à votre modèle objet,  lors de l’exécution de l’application une exception sera levée.</p>
<p>Pour corriger cela,  vous allez ajouter les lignes de code suivantes dans le fichier _AppStart qui se trouve à la racine de votre application :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@<span style="color: #0000ff;">using</span> DB = System.Data.Entity;<br />@{<br />  <br />    DB.Database.SetInitializer(<span style="color: #0000ff;">new</span> DB.DropCreateDatabaseIfModelChanges&lt;WebMatrixCrudAppContext&gt;());<br />}</pre>
<p></div>
<p>En cas de modification du modèle objet lors de l’exécution de l’application, ces lignes de code vont permettre de régénérer la base de données qui correspondra au nouveau modèle.</p>
<p>Attention, la base de données sera recréée à nouveau, donc toutes les données présentes dans celle-ci seront perdues.</p>
<p><strong>Création d’un Repository</strong></p>
<p>Les bonnes pratiques de développement avec Entity Framework recommandent l’utilisation d’un Repository pour les opérations CRUD. Le Repository permet de créer une couche d’abstraction entre la couche d’accès aux données et la logique métier de l’application, et éviter ainsi une dépendance entre la base de données et la logique métier.</p>
<p>Le code du Repository permettant d’effectuer des opérations CRUD sur l’entité Personne est le suivant :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">using</span> System;<br /><span style="color: #0000ff">using</span> System.Collections.Generic;<br /><span style="color: #0000ff">using</span> System.Data;<br /><span style="color: #0000ff">using</span> System.Data.Entity;<br /><span style="color: #0000ff">using</span> System.Web;<br /><br /><span style="color: #008000">/// &lt;summary&gt;</span><br /><span style="color: #008000">/// Summary description for ClassName</span><br /><span style="color: #008000">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> PersonneRepository<br />{<br />    <span style="color: #0000ff">private</span> WebMatrixCrudAppContext _context = <span style="color: #0000ff">new</span> WebMatrixCrudAppContext();<br /><br />    <span style="color: #0000ff">public</span> Personne Find(<span style="color: #0000ff">int</span> id)<br />    {<br />        <span style="color: #0000ff">return</span> _context.Personnes.Find(id);<br />    }<br /><br />    <span style="color: #0000ff">public</span> List&lt;Personne&gt; GetAll()<br />    {<br />       <span style="color: #0000ff">return</span> _context.Personnes.ToList();<br /><br />    } <br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Add(Personne personne)<br /><br />    {<br />        _context.Personnes.Add(personne);<br />       _context.SaveChanges();<br />    }<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Delette(Personne  personne)<br />    {<br />       _context.Personnes.Remove(personne);<br />       _context.SaveChanges();<br />    }<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Update(Personne personne)<br />    {<br />      _context.Entry(personne).State = EntityState.Modified;<br />      _context.SaveChanges();<br />    <br />    }<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Remove(Personne personne)<br />    {<br />      _context.Personnes.Remove(personne);<br />      _context.SaveChanges();<br />    }<br />}</pre>
<p></div>
<p>Ce code doit être ajouté dans un fichier PersonneRepository.cs dans le dossier App_Code. Créez de même les Repository pour les entités Organisme et Affiliation respectivement dans les fichiers OrganismeRepository.cs et AffiliationRepository.cs.<br />
La fonction Find() pour AffiliationRepository doit prendre deux valeurs en paramètre. Le code doit ressembler à ceci :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> Affiliation Find(<span style="color: #0000ff;">int</span> personneId, <span style="color: #0000ff;">int</span> organismeId)<br />    {<br />        <span style="color: #0000ff;">return</span> _context.Affiliations.Find(personneId, organismeId);<br />    }</pre>
<p></div>
<p>La partie suivante portera sur l’implémentation des fonctionnalités CRUD pour nos différentes tables.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 5 : implémentation des fonctionnalités CRUD, cas d&#8217;une table associative</title>
		<link>https://blog.developpez.com/lilroma/p10993/net/creation_d_une_application_crud_avec_web_4</link>
		<comments>https://blog.developpez.com/lilroma/p10993/net/creation_d_une_application_crud_avec_web_4#comments</comments>
		<pubDate>Sat, 28 Apr 2012 11:25:30 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. &#8211; Part 1 : introduction et présentation des outils &#8211; Part 2 : création de l&#8217;application &#8230; <a href="https://blog.developpez.com/lilroma/p10993/net/creation_d_une_application_crud_avec_web_4">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>&#8211; Part 1 : <a href="http://blog.developpez.com/lilroma/p10870/">introduction et présentation des outils</a></p>
<p>&#8211; Part 2 : <a href="http://blog.developpez.com/lilroma/p10876/">création de l&rsquo;application et définition du modèle objet</a></p>
<p>&#8211; Part 3 : <a href="http://blog.developpez.com/lilroma/p10896/">création du DBContex et du Repository</a></p>
<p>&#8211; Part 4 : <a href="http://blog.developpez.com/lilroma/p10980/">implémentation des fonctionnalités CRUD</a></p>
<p>Dans cette cinquième et dernière partie de notre tutoriel sur la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework, nous verrons comment implémenter les interfaces Web pour la lecture, la modification, la suppression et l&rsquo;enregistrement des données pour une table associative.</p>
<p><span id="more-57"></span></p>
<p>La table Affiliations étant une table association, quelques modifications seront donc nécessaires au code utilisé pour Personne et Organisme.</p>
<p><strong>1 &#8211; Implémentation de la grille</strong></p>
<p>Dans le dossier Affiliations, ajoutez un nouveau fichier Index.cshtml.</p>
<p>Dans ce fichier, ajoutez les lignes de code suivantes, qui vont permettre d&rsquo;afficher dans cette page la liste des affiliations qui ont été enregistrées dans la base de données :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 1200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    <span style="color: #008000">/// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Gestion des organismes&quot;</span>;<br />    <span style="color: #008000">//déclaration des variables</span><br />    var af = <span style="color: #0000ff">new</span> AffiliationRepository();<br />   <span style="color: #008000">//déclaration de la grille</span><br />    var grid = <span style="color: #0000ff">new</span> WebGrid(af.GetAll(),rowsPerPage : 10);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h1&gt;Affiliations.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080">&quot;Create&quot;</span>&gt;Ajouter un nouvel enregistrement&lt;/a&gt;&lt;/p&gt;<br />    @* formatage et affichage de la grille *@<br />        @grid.GetHtml(tableStyle:<span style="color: #006080">&quot;grid&quot;</span>,<br />        headerStyle:<span style="color: #006080">&quot;head&quot;</span>,<br />        alternatingRowStyle: <span style="color: #006080">&quot;altrow&quot;</span>,<br />            columns: grid.Columns(<br />                grid.Column(<span style="color: #006080">&quot;Personne.Nom&quot;</span>,<span style="color: #006080">&quot;Employé&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;Organisme.Nom&quot;</span>,<span style="color: #006080">&quot;Organisme&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;Fonction&quot;</span>, <span style="color: #006080">&quot;Fonction&quot;</span>),<br />                grid.Column(<span style="color: #006080">&quot;Telephone&quot;</span>, <span style="color: #006080">&quot;Téléphone&quot;</span>),<br /><br />                grid.Column(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>, format: @&lt;text&gt;&lt;a href=<span style="color: #006080">&quot;Edit?organismeId=@item.OrganismeId&amp;personneId=@item.PersonneId&quot;</span>)&gt;Editer&lt;/a&gt;<br />                        | &lt;a href=<span style="color: #006080">&quot;Details?organismeId=@item.OrganismeId&amp;personneId=@item.PersonneId&quot;</span>)&gt;Détails&lt;/a&gt;<br />                        | &lt;a href=<span style="color: #006080">&quot;Delete?organismeId=@item.OrganismeId&amp;personneId=@item.PersonneId&quot;</span>)&gt;Supprimer&lt;/a&gt;&lt;/text&gt;)<br />                    )<br />        <br />        )</pre>
<p></div>
<p>Vous remarquez certainement pour les colonnes Employé et Organisme, l&rsquo;affichage des propriétés Personne.Nom et Organisme.Nom. En effet, lors de la définition de l&rsquo;entité Affiliation, vous avez défini les classes Personne et Organisme comme propriétés de l&rsquo;entité. Cela permet à Entity Framework de charger automatiquement dans ces propriétés les données correspondantes aux clés étrangères dans la table Affiliations.</p>
<p>A l&rsquo;exécution de cette page, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/listeaffiliations.png" alt="" title="" /></p>
<p><strong>2 &#8211; Affichage détaillé</strong></p>
<p>Dans la page précédente, certaines informations comme l&rsquo;adresse email n&rsquo;ont pas été affichées dans la grille. Pour visualiser ces données, une page d&rsquo;affichage détaillé doit être ajoutée à l&rsquo;application.</p>
<p>Pour ajouter cette page, faites un clic droit sur le dossier Affiliation, sélectionnez l&rsquo;option New File et créez un nouveau fichier Detail.cshtml.</p>
<p>Dans ce fichier, vous allez ajouter les lignes de code suivantes :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 1200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@{<br />    <br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Détails"</span>;<br />   <span style="color: #008000;">//Recupération des Id</span><br />    <span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />    <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br />    <span style="color: #008000;">//Déclaration des variables</span><br />    var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />    var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br />    <span style="color: #008000;">//Selection de l'élément correspondant aux Id</span><br />   affiliation = af.Find(personneId, organismeId);<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h1&gt;Détails.&lt;/h1&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"employe"</span>&gt;<br />                &lt;label&gt;Employé:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Personne.Prenom @affiliation.Personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"organisme"</span>&gt;<br />                &lt;label&gt;Organisme:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Organisme.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"fonction"</span>&gt;<br />                &lt;label&gt;Fonction:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Fonction&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"email"</span>&gt;<br />                &lt;label&gt;Adresse mail:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Email&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"telephone"</span>&gt;<br />                &lt;label&gt;Téléphone:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Telephone&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br />    &lt;/fieldset&gt;<br /><br />&lt;p&gt;&lt;a href=<span style="color: #006080;">"Edit?organismeId=@affiliation.OrganismeId&amp;personneId=@affiliation.PersonneId"</span>&gt;Editer&lt;/a&gt; |<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />&lt;/p&gt;</pre>
<p></div>
<p>A l&rsquo;exécution, vous obtiendrez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/detailsaffiliations.png" alt="" title="" /></p>
<p><strong>3 &#8211; Enregistrement</strong></p>
<p>Compte tenu du fait que Affiliations est une table association, vous allez dans un premier temps charger dans des listes déroulantes les noms des personnes et des organismes.</p>
<p>Pour cela, dans le fichier Create.cshtml que vous avez ajouté au dossier Affiliation, vous allez insérer les lignes de code suivantes :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />    var pr = <span style="color: #0000ff;">new</span> PersonneRepository();<br />    var og = <span style="color: #0000ff;">new</span> OrganismeRepository();<br />   <br />    var personnes = <span style="color: #0000ff;">new</span> List&lt;Personne&gt;();<br />    var organismes = <span style="color: #0000ff;">new</span> List&lt;Organisme&gt;();<br /><br />    personnes = pr.GetAll();<br />    organismes = og.GetAll();</pre>
<p></div>
<p>Une boucle foreach sera utilisée pour charger les données dans une liste déroulante HTML. Le code pour effectuer cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;select id=<span style="color: #006080;">"personneId"</span> name=<span style="color: #006080;">"personneId"</span>&gt;<br />                    @<span style="color: #0000ff;">foreach</span>(var p <span style="color: #0000ff;">in</span> personnes){<br />                    &lt;option <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@p.PersonneId"</span>&gt;@p.Nom&lt;/option&gt;<br />                    }<br />                &lt;/select&gt;</pre>
<p></div>
<p>En plus de la validation des champs, une vérification doit être effectuée pour éviter les contraintes de validation des clés. Le code pour cela est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">if</span> (db.Affiliations.Find(personneId, organismeId) != <span style="color: #0000ff;">null</span>)<br />            { <br />                <br />                <span style="color: #008000;">//Ajout d'un message d'erreur si les Id existent déjà dans la table affiliations</span><br />                 ModelState.AddError(<span style="color: #006080;">"personneId"</span>,<span style="color: #006080;">"Cet enregistrement existe déjà dans la base de données"</span>);<br />            }</pre>
<p></div>
<p>Le code complet de la page Create.cshtml est le suivant :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 2200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />   <span style="color: #008000">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Enregistrement d'un organisme&quot;</span>;<br /><br />    <span style="color: #008000">// initialisation des variables</span><br />    var fonction = <span style="color: #006080">&quot;&quot;</span>;<br />    var email = <span style="color: #006080">&quot;&quot;</span>;<br />    var telephone = <span style="color: #006080">&quot;&quot;</span>;<br />    <span style="color: #008000">//Lecture des données sur les personnes et les organismes</span><br />    var pr = <span style="color: #0000ff">new</span> PersonneRepository();<br />    var og = <span style="color: #0000ff">new</span> OrganismeRepository();<br />    var af = <span style="color: #0000ff">new</span> AffiliationRepository();<br /><br />   <br />    var personnes = <span style="color: #0000ff">new</span> List&lt;Personne&gt;();<br />    var organismes = <span style="color: #0000ff">new</span> List&lt;Organisme&gt;();<br /><br />    personnes = pr.GetAll();<br />    organismes = og.GetAll(); <br /><br /><br />     <span style="color: #008000">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />    <span style="color: #008000">// Validation de la fonction</span><br />    Validation.RequireField(<span style="color: #006080">&quot;fonction&quot;</span>, <span style="color: #006080">&quot;La fonction est obligatoire.&quot;</span>);<br />    <br />   <br />    <span style="color: #0000ff">if</span> (IsPost) {<br />        <span style="color: #0000ff">int</span> personneId = Request.Form[<span style="color: #006080">&quot;personneId&quot;</span>].AsInt();<br />        <span style="color: #0000ff">int</span> organismeId = Request.Form[<span style="color: #006080">&quot;organismeId&quot;</span>].AsInt();<br />        fonction = Request.Form[<span style="color: #006080">&quot;fonction&quot;</span>];<br />        email = Request.Form[<span style="color: #006080">&quot;email&quot;</span>];<br />        telephone = Request.Form[<span style="color: #006080">&quot;telephone&quot;</span>];<br />        <br />        <span style="color: #0000ff">if</span> (af.Find(personneId, organismeId) != <span style="color: #0000ff">null</span>)<br />            { <br />                <br />                <span style="color: #008000">//Ajout d'un message d'erreur si les Id exitent déjà dans la table affiliations</span><br />                 ModelState.AddError(<span style="color: #006080">&quot;personneId&quot;</span>,<span style="color: #006080">&quot;Cet enregistrement existe déjà dans la base de données&quot;</span>);<br />            }<br />  <br />        <br />        <span style="color: #0000ff">if</span> (Validation.IsValid()) { <br />              <br />            <span style="color: #0000ff">if</span>(ModelState.IsValid) {   <br />                 var affiliation = <span style="color: #0000ff">new</span> Affiliation{<br />                PersonneId = personneId, OrganismeId = organismeId, Fonction = fonction, Email = email, Telephone = telephone };<br />           <br />                 af.Add(affiliation);<br />   <br />                 Response.Redirect(<span style="color: #006080">&quot;Index&quot;</span>);<br />             }<br />             }<br /><br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;title&quot;</span>&gt;<br />    &lt;h2&gt;Enregistrement d<span style="color: #006080">'une affiliation&lt;/h2&gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;<br />    @* Notification en cas d'</span>erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080">&quot;Veuillez corriger les erreurs suivantes:&quot;</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;Formlaire &lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;personneId&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;personneId&quot;</span> &gt;Employé:&lt;/label&gt;<br />                &lt;select id=<span style="color: #006080">&quot;personneId&quot;</span> name=<span style="color: #006080">&quot;personneId&quot;</span>&gt;<br />                    @<span style="color: #0000ff">foreach</span>(var p <span style="color: #0000ff">in</span> personnes){<br />                    &lt;option <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@p.PersonneId&quot;</span>&gt;@p.Nom&lt;/option&gt;<br />                    }<br />                &lt;/select&gt;<br />            &lt;/li&gt;<br />            <br />             &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;organismeId&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;organismeId&quot;</span> &gt;Organisme:&lt;/label&gt;<br />                &lt;select id=<span style="color: #006080">&quot;organismeId&quot;</span> name=<span style="color: #006080">&quot;organismeId&quot;</span>&gt;<br />                    @<span style="color: #0000ff">foreach</span>(var o <span style="color: #0000ff">in</span> organismes){<br />                    &lt;option <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@o.OrganismeId&quot;</span>&gt;@o.Nom&lt;/option&gt;<br />                    }<br />                &lt;/select&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;fonction&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;fonction&quot;</span> @<span style="color: #0000ff">if</span>(!ModelState.IsValidField(<span style="color: #006080">&quot;fonction&quot;</span>)){&lt;text&gt;<span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;error-label&quot;</span>&lt;/text&gt;}&gt;Fonction:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;fonction&quot;</span> name=<span style="color: #006080">&quot;fonction&quot;</span> title=<span style="color: #006080">&quot;Fonction&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@fonction&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;fonction&quot;</span>) /&gt;<br />                @Html.ValidationMessage(<span style="color: #006080">&quot;fonction&quot;</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;email&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;email&quot;</span>&gt;Adresse mail:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;email&quot;</span> name=<span style="color: #006080">&quot;email&quot;</span> title=<span style="color: #006080">&quot;Email&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@email&quot;</span> /&gt;<br />             <br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;telephone&quot;</span>&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;telephone&quot;</span>&gt;Numéro de téléphone:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;text&quot;</span> id=<span style="color: #006080">&quot;telephone&quot;</span> name=<span style="color: #006080">&quot;telephone&quot;</span> title=<span style="color: #006080">&quot;Téléphone&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@telephone&quot;</span> /&gt;<br />                <br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> title=<span style="color: #006080">&quot;Enregistrer&quot;</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br />&lt;a href=<span style="color: #006080">&quot;Index&quot;</span>&gt;Retour à la liste&lt;/a&gt;</pre>
<p></div>
<p>A l&rsquo;exécution, vous obtenez le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/enregaffiliation.png" alt="" title="" /></p>
<p><strong>4 &#8211; Modification</strong></p>
<p>Penchons-nous maintenant sur la page permettant de modifier les informations d&rsquo;une affiliation. Une nouvelle page Edit.cshtml doit être ajoutée dans le dossier Affiliation.</p>
<p>Dans cette page, vous allez dans un premier temps écrire le code permettant de retourner les informations sur la ligne qui doit être modifiée :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />   <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br /><br />   <span style="color: #008000;">// initialisation des variables</span><br />   var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />   var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br />   affiliation = af.Find(personneId, organismeId);<br /><br />   var fonction = affiliation.Fonction;<br />   var email = affiliation.Email;<br />   var telephone = affiliation.Telephone;</pre>
<p></div>
<p>Le code permettant de prendre en compte les modifications dans la base de données avec Entity Framework est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">affiliation.Fonction = fonction;<br />affiliation.Email = email;<br />affiliation.Telephone = telephone;<br /><span style="color: #008000;">//Modification de l'affiliation</span><br />af.Update(affiliation);</pre>
<p></div>
<p>Le code complet pour cette page est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 2200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@<span style="color: #0000ff;">using</span> System.Data<br />@{<br />    <span style="color: #008000;">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Modification"</span>;<br /><br />   <br />    <span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />    <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br /><br />    <span style="color: #008000;">// initialisation des variables</span><br />    var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />    var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br /><br />    affiliation = af.Find(personneId, organismeId);<br /><br />    var fonction = affiliation.Fonction;<br />    var email = affiliation.Email;<br />    var telephone = affiliation.Telephone;<br />   <br />    <span style="color: #008000;">// Ajout des scripts de validation</span><br />    Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery-1.6.2.min.js"</span>);<br />    Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery.validate.min.js"</span>);<br />    Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery.validate.unobtrusive.min.js"</span>);<br /><br />     <span style="color: #008000;">// Validation de la fonction</span><br />    Validation.RequireField(<span style="color: #006080;">"fonction"</span>, <span style="color: #006080;">"La fonction est obligatoire."</span>);<br />   <br /><br />    <span style="color: #0000ff;">if</span> (IsPost) {<br />        fonction = Request.Form[<span style="color: #006080;">"fonction"</span>];<br />        email = Request.Form[<span style="color: #006080;">"email"</span>];<br />        telephone = Request.Form[<span style="color: #006080;">"telephone"</span>];<br />        <br />          <span style="color: #0000ff;">if</span> (Validation.IsValid()) { <br />                <br />                 affiliation.Fonction = fonction;<br />                 affiliation.Email = email;<br />                 affiliation.Telephone = telephone;<br />                 <span style="color: #008000;">//Modification de l'affiliation</span><br />                 af.Update(affiliation);<br /><br />                 Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />                <br />             }<br />    };<br />   <br />                  <br />        }    <br />   <br /><br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h2&gt;Modification.&lt;/h2&gt;<br />&lt;/hgroup&gt;<br /><br />&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />     @* Notification en cas d'erreur de validation *@<br />    @Html.ValidationSummary(<span style="color: #006080;">"Veuillez corriger les erreurs suivantes:"</span>)<br /><br />    &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />             &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"employe"</span>&gt;<br />                &lt;label&gt;Employé:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Personne.Prenom @affiliation.Personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"organisme"</span>&gt;<br />                &lt;label&gt;Organisme:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Organisme.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"fonction"</span>&gt;<br />                &lt;label <span style="color: #0000ff;">for</span>=<span style="color: #006080;">"fonction"</span> @<span style="color: #0000ff;">if</span>(!ModelState.IsValidField(<span style="color: #006080;">"fonction"</span>)){&lt;text&gt;<span style="color: #0000ff;">class</span>=<span style="color: #006080;">"error-label"</span>&lt;/text&gt;}&gt;Fonction:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080;">"text"</span> id=<span style="color: #006080;">"fonction"</span> name=<span style="color: #006080;">"fonction"</span> title=<span style="color: #006080;">"Fonction"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@fonction"</span> @Validation.GetHtml(<span style="color: #006080;">"fonction"</span>) /&gt;<br />                @* Write any email validation errors to the page *@<br />                @Html.ValidationMessage(<span style="color: #006080;">"fonction"</span>)<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"email"</span>&gt;<br />                &lt;label <span style="color: #0000ff;">for</span>=<span style="color: #006080;">"email"</span>&gt;Adresse mail:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080;">"text"</span> id=<span style="color: #006080;">"email"</span> name=<span style="color: #006080;">"email"</span> title=<span style="color: #006080;">"Email"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@email"</span> /&gt;<br />             <br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"telephone"</span>&gt;<br />                &lt;label <span style="color: #0000ff;">for</span>=<span style="color: #006080;">"telephone"</span>&gt;Numéro de téléphone:&lt;/label&gt;<br />                &lt;input type=<span style="color: #006080;">"text"</span> id=<span style="color: #006080;">"telephone"</span> name=<span style="color: #006080;">"telephone"</span> title=<span style="color: #006080;">"Téléphone"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"@telephone"</span> /&gt;<br />                <br />            &lt;/li&gt;<br />        &lt;/ol&gt;<br />        &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Modifier"</span> title=<span style="color: #006080;">"Edit"</span> /&gt;<br />        <br />    &lt;/fieldset&gt;<br />&lt;/form&gt;<br />&lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br /></pre>
<p></div>
<p>qui produit le résultat suivant à l&rsquo;exécution :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/modifaffiliation.png" alt="" title="" /></p>
<p><strong>5 &#8211; Suppression</strong></p>
<p>Enfin, pour finir avec cette table, vous allez créer la page Delete.cshtml dans le dossier Affiliation.</p>
<p>Le code source de cette page n&rsquo;a rien de particulier et reprend les principes qui ont été utilisés pour implémenter la page de suppression pour la table Personnes.</p>
<p>Le code complet pour cette page est le suivant :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 1200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">@{<br />    <span style="color: #008000;">// Définition du layout et du titre de la page</span><br />    Layout = <span style="color: #006080;">"~/_SiteLayout.cshtml"</span>;<br />    Page.Title = <span style="color: #006080;">"Suppression"</span>;<br /><br />    <span style="color: #0000ff;">int</span> personneId = Request[<span style="color: #006080;">"personneId"</span>].AsInt();<br />    <span style="color: #0000ff;">int</span> organismeId = Request[<span style="color: #006080;">"organismeId"</span>].AsInt();<br /><br />    var af = <span style="color: #0000ff;">new</span> AffiliationRepository();<br />    var affiliation = <span style="color: #0000ff;">new</span> Affiliation();<br />    <span style="color: #008000;">//Recherche de l'affiliation à supprimerf</span><br />    affiliation = af.Find(personneId, organismeId);<br /><br />    <span style="color: #0000ff;">if</span>(IsPost)<br />    {<br />            <span style="color: #008000;">//Supression de l'enregistrement</span><br />            af.Remove(affiliation);<br />            Response.Redirect(<span style="color: #006080;">"Index"</span>);<br />    }<br />                  <br />}    <br />&lt;hgroup <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"title"</span>&gt;<br />    &lt;h1&gt;Suppression.&lt;/h1&gt;<br />   &lt;h3&gt;Êtes-vous sur de vouloir supprimer cet enregistrement ?&lt;/h3&gt;<br />&lt;/hgroup&gt;  <br /> &lt;fieldset&gt;<br />        &lt;legend&gt;&lt;/legend&gt;<br />        &lt;ol&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"employe"</span>&gt;<br />                &lt;label&gt;Employé:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Personne.Prenom @affiliation.Personne.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            <br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"organisme"</span>&gt;<br />                &lt;label&gt;Organisme:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Organisme.Nom&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"fonction"</span>&gt;<br />                &lt;label&gt;Fonction:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Fonction&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"email"</span>&gt;<br />                &lt;label&gt;Adresse mail:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Email&lt;/label&gt;<br />            &lt;/li&gt;<br />            &lt;li <span style="color: #0000ff;">class</span>=<span style="color: #006080;">"telephone"</span>&gt;<br />                &lt;label&gt;Téléphone:&lt;/label&gt;<br />                &lt;label&gt;@affiliation.Telephone&lt;/label&gt;<br />            &lt;/li&gt;<br />        &lt;/ol&gt; <br /> <br />    &lt;/fieldset&gt;<br /><br /><br />&lt;form method=<span style="color: #006080;">"post"</span> action=<span style="color: #006080;">""</span>&gt;<br />    &lt;p&gt;<br />    &lt;input type=<span style="color: #006080;">"submit"</span> <span style="color: #0000ff;">value</span>=<span style="color: #006080;">"Supprimer"</span> title=<span style="color: #006080;">"Supprimer"</span> /&gt;<br /> &lt;a href=<span style="color: #006080;">"Index"</span>&gt;Retour à la liste&lt;/a&gt;<br />    &lt;/p&gt;<br />    &lt;/form&gt;</pre>
<p></div>
<p>Il permet d&rsquo;obtenir le résultat suivant à l&rsquo;exécution :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-application-crud-entity-framework/images/deleteaffiliation.png" alt="" title="" /></p>
<p><strong>Conclusion</strong></p>
<p>Entity Framework, la technologie d&rsquo;accès aux données qui est en passe de devenir un standard dans l&rsquo;écosystème .NET peut être assez facilement exploitée avec WebMatrix pour la création d&rsquo;applications Web robustes. Bien que l&rsquo;éditeur WebMatrix manque beaucoup de fonctionnalités et d&rsquo;extensions qui sont disponibles dans Visual Studio, comme l&rsquo;échafaudage pour développer rapidement et facilement des applications utilisant Entity Framework, il permet néanmoins au développeur d&rsquo;exploiter quasiment toutes les fonctionnalités de la librairie et supporte l&rsquo;IntelliSence pour celle-ci.</p>
<p>Ce tutoriel nous a permis de concevoir bout-à-bout une petite solution complète de gestion des affiliations en utilisant Entity Framework, WebMatrix, Razor, NuGet et SQL Server Compact Edition et nous familiariser avec tous ces outils qui sont assez utilisés dans l&rsquo;environnement .NET.</p>
<p>Vous pouvez donc vous baser sur cet exemple ou en modifier le code à votre guise pour développer votre propre application répondant à vos besoins fonctionnels avec WebMatrix.</p>
<p><strong>Sources</strong></p>
<p>Vous pouvez télécharger et modifier les sources ci-dessous à votre convenance.</p>
<p><img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.rar">Version RAR</a></p>
<p><img src="http://www.developpez.be/images/kitsrc.jpg" alt="" title="" /> <a href="ftp://ftp-developpez.com/rdonfack/WebMatrixCrudApp.zip">Version ZIP</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Création d’une application CRUD avec WebMatrix, Razor et Entity Framework Part 2 : création de l&#8217;application et définition du modèle objet</title>
		<link>https://blog.developpez.com/lilroma/p10876/net/creation_d_une_application_crud_avec_web_1</link>
		<comments>https://blog.developpez.com/lilroma/p10876/net/creation_d_une_application_crud_avec_web_1#comments</comments>
		<pubDate>Sun, 25 Mar 2012 14:07:24 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&#8217;une application CRUD avec WebMatrix, Razor et Entity Framework. Dans la première partie introductive, nous avons présenté le but de cet article et les différents &#8230; <a href="https://blog.developpez.com/lilroma/p10876/net/creation_d_une_application_crud_avec_web_1">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce tutoriel à pour objectif de fournir une démarche pas à pas pour la création d&rsquo;une application CRUD avec WebMatrix, Razor et Entity Framework.</p>
<p>Dans <a href="http://blog.developpez.com/lilroma/p10870/">la première partie introductive</a>, nous avons présenté le but de cet article et les différents outils qui seront utilisés pour l’implémentation de notre application CRUD.</p>
<p>Cette seconde partie portera essentiellement sur la création de l&rsquo;application avec WebMatrix, l’installation d&rsquo;Entity Framework à partir de NuGet et la définition du modèle objet.</p>
<p><span id="more-53"></span></p>
<p><strong>Création de l’application</strong></p>
<p>Maintenant que nous nous sommes familiarisés avec les différents outils que nous allons utiliser, nous pouvons maintenant procéder à la création de notre application.<br />
Pour cela, vous allez lancer WebMatrix. Dans la fenêtre de démariage rapide, vous allez sélectionner Modèles (Templates) parmi les différentes options qui sont proposées.</p>
<p><img src="http://blog.developpez.com/media/quickstart.PNG" width="821" height="546" alt="" /> </p>
<p>Dans la fenêtre qui va s’afficher, sélectionnez le modèle de projet Site de démarrage (Starter Site), renseignez le nom du site (<strong>WebMatrixCRUDApp</strong>) et cliquez enfin pour le bouton OK.</p>
<p><img src="http://blog.developpez.com/media/Templates_01.PNG" width="824" height="547" alt="" /> </p>
<p>Le modèle Site de démarrage contient par défaut une interface à onglet et des fonctionnalités d’authentification.</p>
<p>Une fois le projet créé, vous pouvez voir les éléments suivants dans la fenêtre d’exploration, en sélectionnant l’espace de travail Files dans la zone de sélection d’espace de travail.</p>
<p><img src="http://blog.developpez.com/media/solutionexplorer_01.PNG" width="192" height="315" alt="" /></p>
<p><strong>Installation d’Entity Framework</strong></p>
<p>Dans la boite d’outils, vous allez cliquer sur le bouton « Gallery » ayant le logo de NuGet. Dans la fenêtre des packages qui s’affichent par défaut, sélectionnez le package Entity Framework comme l’illustre l’image ci-dessous :</p>
<p><img src="http://blog.developpez.com/media/DownloadEntity.PNG" width="409" height="285" alt="" /></p>
<p>La fenêtre du gestionnaire de packages NuGet s’affiche avec les détails sur le package que vous souhaitez installer.<br />
Cliquez sur le bouton « Install » et acceptez les termes d’utilisation pour que NuGet procède au téléchargement et à l’installation d’Entity Framework dans votre application :</p>
<p><img src="http://blog.developpez.com/media/InstallEntityF.PNG" width="714" height="483" alt="" /> </p>
<p>Le fichier EntityFramework.dll sera alors ajouté dans le dossier bin de votre application et une référence à l’espace de nom System.Data.Entity sera automatiquement ajoutée au fichier Web.config.</p>
<p><strong>Définition du modèle objet</strong></p>
<p>Notre exemple simple portera sur une petite application pour la gestion du carnet d’adresses d’une entreprise. L’entreprise contient plusieurs organismes  et un employé peut travailler dans un ou plusieurs organismes.</p>
<p>Le schéma de la base de données que nous allons utiliser est donc le suivant :</p>
<p><img src="http://blog.developpez.com/media/DatabaseSchema.PNG" width="594" height="316" alt="" /> </p>
<p>De ce schéma, nous allons créer les différentes entités correspondantes. Chaque entité doit être définie comme une classe C# afin d’être compréhensible par Entity Framework.</p>
<p>Vous allez créer un nouveau dossier « App_code » en faisant un clic droit sur votre projet dans l’explorateur de solution et en cliquant sur « New Folder ».</p>
<p>Sélectionnez ce dossier et ajoutez-y un nouveau fichier C# en cliquant sur le bouton « New » de la boite d’outils et ensuite sur la commande « New File ». </p>
<p>Dans la fenêtre qui va s’afficher, sélectionnez le type de fichier Class(C#), renseignez le nom du fichier (Personne.cs)  et validez sur OK.</p>
<p>Ajoutez par la suite les lignes de code suivantes dans ce fichier pour définir  la classe Personne.</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> Personne<br />{<br />    <br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> PersonneId { get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nom {get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Prenom {get; set;}<br /><br />}<br /></pre>
<p></div>
<p>Procédez de même pour le fichier Organisme.cs, dont la classe aura la définition suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Organisme<br />{<br />   <br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Adresse {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br />}<br /></pre>
<p></div>
<p>Créez également la classe Affiliation qui aura la définition suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Affiliation<br />{   <br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Fonction {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Email {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br />}<br /></pre>
<p></div>
<p>À ce stade, vous avez simplement défini des entités correspondantes au schéma de votre base de données. Cependant,  Entity Framework est incapable de définir les relations entre les tables Presonne et Affilialtion, ainsi qu’entre les tables Organisme et Affiliation.</p>
<p>Pour matérialiser cela, vous allez donc ajouter une propriété Personne et une propriété Organisme dans la classe Affiliation. La nouvelle définition de cette classe est la suivante :</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> Affiliation<br />{<br />   <br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> PersonneId { get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> OrganismeId { get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Fonction {get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Email {get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Telephone {get; set;}<br /><br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> Personne Personne {get; set;}<br />   <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> Organisme Organisme {get; set;}<br />}<br /></pre>
<p></div>
<p>De même, pour matérialiser le fait qu’une Personne peut avoir plusieurs affiliations dans divers organismes et le fait qu’un organisme dispose de plusieurs personnes affiliées, vous allez ajouter également une propriété supplémentaire dans chacune de ces deux tables. </p>
<p>La nouvelle définition de la classe Personne sera donc la suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Personne<br />{<br />    <br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Prenom {get; set;}<br /><br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br />}<br /></pre>
<p></div>
<p>Et celle de la classe Organisme sera la suivante : </p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> Organisme<br />{<br />   <br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> OrganismeId { get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nom {get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Adresse {get; set;}<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Telephone {get; set;}<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br /><br />}<br /></pre>
<p></div>
<p>Par défaut, lors de la génération de la base de données correspondante à votre modèle objet,  les champs string seront définis par Entity Framework Code First comme des colonnes nvarchar(4000). Pour limiter cette taille, vous allez utiliser l’attribut <strong>[MaxLengthAttribute()]</strong> de la classe DataAnnotation.</p>
<p>L’attribut <strong>[RequiredAttribute]</strong> de cette classe sera également utilisé pour définir les propriétés dont les valeurs sont obligatoires. [ScaffoldColumnAttribute] sera utilisé pour spécifier que la clé primaire doit être autoincrément. Enfin, vous allez définir l’attribut <strong>[KeyAttribute</strong>] pour spécifier les clés étrangères et les tables auxquelles ces clés sont liées.</p>
<p>Le code complet du fichier Personne.cs sera donc le suivant :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> System;<br /><span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #0000ff;">using</span> System.ComponentModel.DataAnnotations;<br /><span style="color: #0000ff;">using</span> System.Web;<br /><br /><span style="color: #008000;">/// &lt;summary&gt;</span><br /><span style="color: #008000;">/// Summary description for ClassName</span><br /><span style="color: #008000;">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Personne<br />{<br />    [ScaffoldColumnAttribute(<span style="color: #0000ff;">false</span>)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Prenom {get; set;}<br /><br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br /><br />}<br /></pre>
<p></div>
<p>Celui du fichier Organisme.cs est le suivant :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> System;<br /><span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #0000ff;">using</span> System.ComponentModel.DataAnnotations;<br /><span style="color: #0000ff;">using</span> System.Web;<br /><br /><span style="color: #008000;">/// &lt;summary&gt;</span><br /><span style="color: #008000;">/// Summary description for ClassName</span><br /><span style="color: #008000;">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Organisme<br />{<br />   [ScaffoldColumnAttribute(<span style="color: #0000ff;">false</span>)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Nom {get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Adresse {get; set;}<br />    [MaxLengthAttribute(50)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br /><br />     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> ICollection&lt;Affiliation&gt; Affiliation {get; set;}<br />}<br /></pre>
<p></div>
<p>Et enfin, la nouvelle définition du fichier Affiliation.cs est la suivante :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">using</span> System;<br /><span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #0000ff;">using</span> System.ComponentModel.DataAnnotations;<br /><span style="color: #0000ff;">using</span> System.Web;<br /><br /><span style="color: #008000;">/// &lt;summary&gt;</span><br /><span style="color: #008000;">/// Summary description for ClassName</span><br /><span style="color: #008000;">/// &lt;/summary&gt;</span><br /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Affiliation<br />{   <br />    [KeyAttribute, ForeignKey(<span style="color: #006080;">"Personne"</span>), Column(Order = 0)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> PersonneId { get; set;}<br />    [KeyAttribute, ForeignKey(<span style="color: #006080;">"Organisme"</span>), Column(Order = 1)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span> OrganismeId { get; set;}<br />    [MaxLengthAttribute(50)]<br />    [RequiredAttribute]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Fonction {get; set;}<br />    [MaxLengthAttribute(50)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Email {get; set;}<br />    [MaxLengthAttribute(50)]<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">string</span> Telephone {get; set;}<br /><br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> Personne Personne {get; set;}<br />    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> Organisme Organisme {get; set;}<br />}</pre>
<p></div>
<p>La troisième partie portera sur la création du DbContext, de la base de données à partir du modèle objet avec EF Code First et enfin la définition des différentes classes Repository qui seront utilisées.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 beta : intégration du gestionnaire de packages NuGet et la galerie d’extensions</title>
		<link>https://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn</link>
		<comments>https://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn#comments</comments>
		<pubDate>Tue, 10 Jan 2012 15:41:46 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La gestion simple et aisée des briques logicielles pour une application et L’extensibilité sont des fonctionnalités importantes pour un environnement de développement. WebMatrix 2 bêta, en plus des nouvelles fonctionnalités assez intéressantes que nous avons présenté jusqu’ici (authentification en utilisant &#8230; <a href="https://blog.developpez.com/lilroma/p10639/net/webmatrix_2_beta_integration_du_gestionn">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>La gestion simple et aisée des briques logicielles pour une application et L’extensibilité sont des fonctionnalités importantes pour un environnement de développement.</p>
<p>WebMatrix 2 bêta, en plus des nouvelles fonctionnalités assez intéressantes que nous avons présenté jusqu’ici (<a href="http://blog.developpez.com/lilroma/p10537/">authentification en utilisant un compte Twitter ou Facebook</a>, <a href="http://blog.developpez.com/lilroma/p10518/">support amélioré pour PHP</a>, <a href="http://blog.developpez.com/lilroma/p10574/">amélioration de la validation des données utilisateur</a>, etc.) intègre désormais une déclinaison du gestionnaire de packages .NET open source NuGet, et une galerie d’extensions.</p>
<table>
<tr align='center'>
<td align='center'><img src="http://blog.developpez.com/media/WebMatrix.jpg" width="215" height="234" alt="" /></td>
</tr>
</table>
<p><span id="more-52"></span></p>
<p><strong>Le gestionnaire de packages NuGet pour WebMatrix</strong></p>
<p>De nos jours, il est difficile de concevoir une application sans toute foi faire appel à des bibliothèques externes.  La gestion (téléchargement, installation, configuration, mises à jour) de ces dépendances externes peut rapidement devenir un travail long et complexe. NuGet offre un moyen simple pour effectuer ces opérations. </p>
<p>Depuis la première version de WebMatrix, l’accès aux bibliothèques externes se faisait à travers la page d’administration d’ASP.NET WebPages dans le navigateur. Le développeur disposait uniquement que des fonctionnalités de recherche et d’installation et suppression des packages depuis cette page. Les fonctionnalités de mise à jour, configuration et autres n’étaient pas prises en charge.</p>
<p>Avec la version 2 de WebMatrix, NuGet est entièrement intégré dans l’espace de travail de l’environnement Web, afin de réduire le temps et les étapes nécessaires pour obtenir et gérer un package. Désormais, dans une application Web utilisant WebMatrix, le développeur pourra facilement ajouter, supprimer, configurer et mettre à jour une dépendance.</p>
<p>Nous verrons donc dans ce billet de blog, comme utiliser NuGet avec WebMatrix pour effectuer ces tâches.</p>
<p><strong>Accès à NuGet</strong></p>
<p>Nous allons dans un premier temps créer un nouveau projet en utilisant le modèle « Site Starter ». Après ouverture du projet, nous devons aller dans l’espace de travail « Files ».</p>
<p>Dans le ruban de la barre d’outils, vous verrez un nouveau bouton « Gallery » comme l’illustre la capture ci-dessous :</p>
<p><img src="http://blog.developpez.com/media/nugetrubon.PNG" width="386" height="91" alt="" /> </p>
<p>En cliquant sur le bouton Gallery, NuGet affiche par défaut les packages les plus utiles, ainsi que les packages qui sont déjà installés dans votre application.</p>
<p><img src="http://blog.developpez.com/media/Defaultpackgeslist.PNG" width="333" height="288" alt="" /> </p>
<p>Pour voir tous les packages disponibles, il suffit de cliquer sur le bouton contenant le logo de NuGet. À ce moment, une nouvelle fenêtre va s’afficher vous permettant de visualiser, mettre à jour et supprimer un package.</p>
<p><img src="http://blog.developpez.com/media/nugetgallery.PNG" width="714" height="512" alt="" /></p>
<p><strong>Installation d’un package</strong></p>
<p>L’installation d’un package peut se faire directement dans la fenêtre d’affichage des packages les plus utiles ou depuis la fenêtre de la galerie NuGet. La procédure dans les deux cas est la même.</p>
<p>Pour installer un package, vous devez dans un premier temps trouver celui-ci. Une zone de recherche est disponible dans la fenêtre du gestionnaire de packages, permettant de retrouver facilement une bibliothèque.</p>
<p>Lorsque vous avez trouvé le package que vous souhaitez installer, cliquez simplement sur son icône et ensuite sur le bouton « Installer », ou double-cliquez sur l’icône du package pour lancer son installation.</p>
<p>Pour notre exemple, nous allons installer le Helper Twitter (Twitter.Helper). Pour cela, nous allons effectuer une recherche pour retrouver notre package et double cliquer sur son icône pour lancer son installation.</p>
<p><img src="http://blog.developpez.com/media/twitterhelper.PNG" width="696" height="222" alt="" /> </p>
<p>Lorsque le téléchargement et l’installation du package s’achèvent, le message d’état suivant s’affiche pour vous signaler que l’installation a été effectuée avec succès.</p>
<p><img src="http://blog.developpez.com/media/Instalnugetcomplete.PNG" width="361" height="35" alt="" /> </p>
<p><strong>NB :</strong> Si le package nécessite que vous acceptiez les termes de licence, une seconde fenêtre va s’afficher après que vous ayez cliqué sur le bouton Install, vous invitant à lire et accepter les termes de licence.</p>
<p>Pour un package contenant plusieurs dépendances, NuGet se charge automatiquement de trouver ces dépendances,, de les télécharger et d’installer celles-ci dans votre application. S’il y a lieu, celui-ci édite automatiquement le fichier Web.Config pour ajouter une référence à la bibliothèque dans votre projet.</p>
<p>Et voila, vous pouvez désormais utiliser le package et profiter de l’InteliSence qu’offre WebMatrix.</p>
<p><img src="http://blog.developpez.com/media/Intellisencetwitter.PNG" width="668" height="206" alt="" /> </p>
<p><strong>Mise à jour et suppression d’un package</strong> </p>
<p>La galerie compare constamment les packages qui sont installés dans votre application avec ceux qui sont disponibles et classifie dans une rubrique ceux dont une mise à jour est disponible.</p>
<p>Ces packages sont visibles depuis la galerie, en sélectionnant l’option « Updates ».</p>
<p><img src="http://blog.developpez.com/media/nugetupdate.PNG" width="385" height="207" alt="" /> </p>
<p>Pour mettre à jour un package, il suffit simplement de sélectionner celui-ci et cliquer sur le bouton Update.</p>
<p>NB : La mise entraine la suppression de la version précédente du package par NuGet et l’installation automatique de la version la plus récente.</p>
<p>Pour supprimer un package, sélectionnez l’option Installed, trouvez le package que vous souhaitez supprimer et cliquez sur le bouton « Uninstall » pour procéder à la suppression de celui-ci.</p>
<p>NB : La suppression d’un package entraine la suppression de toutes les dépendances liées à celui-ci.</p>
<p><strong>Ajouter des flux personnalisés</strong></p>
<p>Vous avez également la possibilité de définir un dépôt spécifique pour vos packages.</p>
<p>Supposons que vous avez  créé votre propre package qui sera utilisé par vous et l’ensemble des membres de votre équipe. Pour cela, vous allez définir un repository et donner le lien vers celui-ci, qui sera utilisé comme source de données par votre équipe.</p>
<p>Pour spécifier une nouvelle source de données dans WebMatrix, il suffit de cliquer sur le Combobox disponible dans la fenêtre de la galerie NuGet, et sélectionner l’option « Add source ».</p>
<p><img src="http://blog.developpez.com/media/Addnugetsource.PNG" width="335" height="179" alt="" /></p>
<p>Dans la boite de dialogue qui apparait, indiquez le nom et l’URL du flux du paquet que vous souhaitez ajouter, puis cliquez sur le bouton « add »</p>
<p><strong>NB :</strong> La source peut être des URL HTTP ou des répertoires locaux ou des répertoires partagés contenant des fichiers de spécifications .nupkg.</p>
<p><img src="http://blog.developpez.com/media/addnugetsource1.PNG" width="520" height="453" alt="" />  </p>
<p>Cliquez ensuite sur le bouton OK pour revenir sur la page précédente. Votre source de données va désormais s’afficher dans la liste déroulante.</p>
<p><strong>Galerie d’extensions WebMatrix</strong></p>
<p>L’extensibilité d’un environnement de développement est une caractéristique importante au succès de celui-ci. L’EDI doit fournir au développeur la possibilité d’étendre ses fonctionnalités de base pour répondre à ses besoins, sans toute fois dégrader les performances de l’éditeur.</p>
<p>En plus d’être un EDI extensible, WebMatrix intègre une galerie d’extensions qui met à la disposition du développeur quasiment les mêmes fonctions que le gestionnaire de packages NuGet pour trouver et installer facilement une extension. D’une interface assez similaire à celle de NuGet pour WebMatrix, la galerie d’extensions vous permet de télécharger, installer, mettre à jour et supprimer des extensions pour WebMatrix.</p>
<p><img src="http://blog.developpez.com/media/extensiongallery.PNG" width="684" height="468" alt="" /></p>
<p>Nous n’allons plus revenir sur les procédures de téléchargement, installation, mise à jour et suppression d’une extension, car la procédure est similaire à celle que nous avons décrite plus haut.</p>
<p>Pour l’instant, juste quelques extensions ont été publiées par les développeurs de WebMatrix, permettant de sauvegarder ses fichiers dans Windows Azure, visualiser les images dans WebMatrix ou encore faire du copier-coller de code.</p>
<p>La création de ses propres extensions peut facilement être effectuée pour un développeur en utilisant MEF. Un modèle de projet sous Visual Studio est d’ailleurs même disponible pour faciliter la tâche. </p>
<p><strong>Conclusion</strong></p>
<p>Force est de constater combien Microsoft à apporter des améliorations à WebMatrix pour faire de l’environnement de développement Web une plateforme adaptée pour des petits projets, mais également pour des projets importants.</p>
<p><strong>Sur le même sujet :</strong></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10574/net/webmatrix/webmatrix-2-beta-validation-des-donnees/">WebMatrix 2 bêta : validation des données utilisateur</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10537/">WebMatrix 2 bêta : intégrer l’authentification Twitter à son site Web</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10518/">WebMatrix 2 bêta : support amélioré pour PHP avec l’IntelliSense</a> ;</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10495/">WebMatrix : retour d’expérience sur l&rsquo;EDI Web</a> ;</p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/web/webmatrix-decouverte-et-prise-main-outil-developpement-web-gratuit-tout/">Découverte et prise en main de WebMatrix</a> ;</p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-utilisation-helpers-et-galerie-applications/">WebMatrix : utilisation des Helpers Razor et de la galerie d&rsquo;applications</a> ;</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10084/net/title-198/">Comment activer et utiliser xdebug avec WebMatrix</a> ; </p>
<p> &#8211; <a href="http://aka.ms/webmatrix2blog">Télécharger WebMatrix 2 bêta</a> .</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebMatrix 2 bêta : validation des données utilisateur</title>
		<link>https://blog.developpez.com/lilroma/p10574/net/webmatrix_2_beta_validation_des_donnees</link>
		<comments>https://blog.developpez.com/lilroma/p10574/net/webmatrix_2_beta_validation_des_donnees#comments</comments>
		<pubDate>Fri, 09 Dec 2011 15:06:04 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Toute application intégrant des formulaires nécessite la mise en œuvre d’un mécanisme de validation des données. Celui-ci doit être fluide et fournir une bonne expérience utilisateur. Dans les applications ASP.NET et ASP.NET MVC, plusieurs ressources sont disponibles permettant de mettre &#8230; <a href="https://blog.developpez.com/lilroma/p10574/net/webmatrix_2_beta_validation_des_donnees">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Toute application intégrant des formulaires nécessite la mise en œuvre d’un mécanisme de validation des données. Celui-ci doit être fluide et fournir une bonne expérience utilisateur.</p>
<p>Dans les applications ASP.NET et ASP.NET MVC, plusieurs ressources sont disponibles permettant de mettre en place assez aisément la validation des données utilisateur dans son application Web. Avec la première version de WebMatrix et WebPages, la validation des données se faisait uniquement en utilisant la classe System.Web.WebPages.Html.ModelState.</p>
<p>La bêta de WebMatrix 2 apporte de nouveaux outils, permettant d’implémenter assez aisément la validation des données côté client et améliorer ainsi les performances de son application web en réduisant les allers-retours vers le serveur.</p>
<p>Les nouvelles classes de validation System.Web.WebPages.ValidationHelper et System.Web.WebPages.Validator ont donc été introduites afin d’effectuer en seulement quelques lignes de code, des taches de validation de données puissantes avec JQuery.</p>
<p>Nous verrons dans cet article comment utiliser ces classes pour mettre en œuvre un mécanisme de validation des données fluide dans son application Web ASP.NET avec WebMatrix.</p>
<table>
<tr align='center'>
<td align='center'><img src="http://blog.developpez.com/media/WebMatrix.jpg" width="215" height="234" alt="" /></td>
</tr>
</table>
<p><span id="more-51"></span></p>
<p>Pour cela, nous allons démarrer notre EDI WebMatrix 2 bêta et ouvrir le modèle de projet « Starter Site ».  Nous allons ensuite cliquer sur « File » dans la zone de sélection d’espace de travail.</p>
<p>En déroulant l’explorateur de fichier, vous vous rendez compte que ce modèle de projet contient désormais des scripts JQuery.</p>
<p><img src="http://blog.developpez.com/media/jquery.PNG" width="193" height="255" alt="" /></p>
<p>Nous allons ajouter au projet un nouveau fichier <strong>Student.cshtml</strong>.</p>
<p>Pour cela, dans la boite d’outils, nous allons dérouler le menu « New », cliquer ensuite sur le bouton « New File » et créer un nouveau fichier Student.cshtml.</p>
<p>Nous allons maintenant ajouter les références suivantes dans le bloc de code Razor en début du fichier :</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery-1.6.2.min.js"</span>);<br />Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery.validate.min.js"</span>);<br />Scripts.Add(<span style="color: #006080;">"~/Scripts/jquery.validate.unobtrusive.min.js"</span>);</pre>
<p></div>
<p>Le gestionnaire de scripts (<strong>Scripts.add()</strong>) permet d’enregistrer les scripts uniquement pour cette page. C’est également une nouveauté qui a été introduite par WebPages 2 Developer Preview. J’espère que j’aurais assez de temps pour pouvoir revenir dessus.</p>
<p>NB : Pour éviter d’avoir à inclure ces références dans chacun de vos formulaires, vous pouvez directement ajouter ces lignes de code dans le fichier Layout.cshtml,  si votre site en contient un.</p>
<p>Nous devons maintenant spécifier les champs qui doivent être vérifiés, avec les messages d’erreurs qui seront affichés en utilisant la méthode <strong>Validation.RequireField()</strong>.</p>
<p>Les lignes de code qui doivent être ajoutées à la suite du code ci-dessus sont les suivantes :</p>
<div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4; text-align: left; max-height: 200px">
<pre id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"><span style="color: #008000">// Les champs qui doivent être vérifiés</span><br />    Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />    Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);<br />    Validation.RequireField(<span style="color: #006080">&quot;date_nais&quot;</span>, <span style="color: #006080">&quot;La date de naissance est obligatoire.&quot;</span>);</pre>
<p></div>
<p>Pour la vérification du type d’un champ (date, entier, etc.), nous allons ajouter un critère de validation dans notre page en utilisant la méthode <strong>Validation.Add()</strong>. La ligne de code suivante sera donc ajoutée pour vérifier si l’entrée de l’utilisateur respecte le format date.</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">Validation.Add(<span style="color: #006080;">"date_nais"</span>, Validator.DateTime(<span style="color: #006080;">"Format de date invalide"</span>));</pre>
<p></div>
<p>Nous pouvons maintenant écrire le code pour le traitement des données si la validation est effectuée avec le succès. Pour cela, nous allons ajouter les lignes de code suivantes à notre fichier, en dessous de celle-ci dessus.</p>
<div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4; text-align: left; max-height: 200px">
<pre id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"><span style="color: #0000ff">if</span> (IsPost)  {<br />        <span style="color: #008000">// Vérification si la validation est OK. </span><br />        <span style="color: #0000ff">if</span> (Validation.IsValid()) {<br />            <span style="color: #008000">//récupération des données utlisateur</span><br />            var nom = Request[<span style="color: #006080">&quot;nom&quot;</span>];<br />            var prenom = Request[<span style="color: #006080">&quot;prenom&quot;</span>];<br />            var date_nais = Request[<span style="color: #006080">&quot;date_nais&quot;</span>];<br />            var email = Request[<span style="color: #006080">&quot;email&quot;</span>];<br />            <span style="color: #008000">// Traitement des donées utilisateur</span><br />            <br />        }</pre>
<p></div>
<p>Passons maintenant à la construction de notre formulaire dans le body. La fonction <strong>@Html.ValidationSummary()</strong> sera utilisée pour afficher le résumer issu de la validation.</p>
<p>La méthode  <strong>@Validation.GetHtml(&laquo;&nbsp;&nbsp;&raquo;)</strong> sera utilisée pour ajouter un attribut de validation à un champ et enfin la méthode <strong>@Html.ValidationMessage()</strong> servira à afficher un message de validation spécifique à côté d’un champ.</p>
<p>Le code complet de notre page Student.cshtml est le suivant :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">@{<br />     Layout = <span style="color: #006080">&quot;~/_SiteLayout.cshtml&quot;</span>;<br />    Page.Title = <span style="color: #006080">&quot;Register an Account&quot;</span>;<br /><br />    <span style="color: #008000">// Scripts de validation</span><br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery-1.6.2.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.min.js&quot;</span>);<br />    Scripts.Add(<span style="color: #006080">&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;</span>);<br /><br />    <span style="color: #008000">// Les champs qui doivent être vérifiés</span><br />    Validation.RequireField(<span style="color: #006080">&quot;nom&quot;</span>, <span style="color: #006080">&quot;Le nom est obligatoire.&quot;</span>);<br />    Validation.RequireField(<span style="color: #006080">&quot;prenom&quot;</span>, <span style="color: #006080">&quot;Le prénom est obligatoire.&quot;</span>);<br />    Validation.RequireField(<span style="color: #006080">&quot;date_nais&quot;</span>, <span style="color: #006080">&quot;La date de naissance est obligatoire.&quot;</span>);<br /><br />    <span style="color: #008000">// Ajout d'un critère de validation</span><br />    Validation.Add(<span style="color: #006080">&quot;date_nais&quot;</span>, Validator.DateTime(<span style="color: #006080">&quot;Format de date invalide&quot;</span>));<br />    <span style="color: #008000">//Vérification du postback</span><br />    <span style="color: #0000ff">if</span> (IsPost)  {<br />        <span style="color: #008000">// Vérification si la validation est OK. </span><br />        <span style="color: #0000ff">if</span> (Validation.IsValid()) {<br />            <span style="color: #008000">//récupération des données utlisateur</span><br />            var nom = Request[<span style="color: #006080">&quot;nom&quot;</span>];<br />            var prenom = Request[<span style="color: #006080">&quot;prenom&quot;</span>];<br />            var date_nais = Request[<span style="color: #006080">&quot;date_nais&quot;</span>];<br />            var email = Request[<span style="color: #006080">&quot;email&quot;</span>];<br />            <span style="color: #008000">// Traitement des données utilisateur</span><br />            <br />        }<br />    }<br />}<br /><br />&lt;!DOCTYPE html&gt;<br /><br />&lt;html lang=<span style="color: #006080">&quot;en&quot;</span>&gt;<br />    &lt;head&gt;<br />        &lt;meta charset=<span style="color: #006080">&quot;utf-8&quot;</span> /&gt;<br />        &lt;title&gt;&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />    &lt;form method=<span style="color: #006080">&quot;post&quot;</span> action=<span style="color: #006080">&quot;&quot;</span>&gt;<br />        &lt;!-- Affichage des erreurs de validation --&gt;<br />        @Html.ValidationSummary(<span style="color: #006080">&quot;Bien vouloir corriger les erreurs suivantes&quot;</span>)<br />        &lt;fieldset&gt;<br />            &lt;legend&gt;Ajout d'un etudiant&lt;/legend&gt;<br />            &lt;div&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;Nom&quot;</span>&gt;Nom :&lt;/label&gt;<br />      <br />      &lt;input type=<span style="color: #006080">&quot;text&quot;</span> name=<span style="color: #006080">&quot;Nom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@Request[&quot;</span>nom<span style="color: #006080">&quot;]&quot;</span>   @Validation.GetHtml(<span style="color: #006080">&quot;nom&quot;</span>) /&gt;<br />            &lt;/div&gt;<br />        <br />         &lt;div&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;Prenom&quot;</span>&gt;Prénom :&lt;/label&gt;<br />      <br />      &lt;input type=<span style="color: #006080">&quot;text&quot;</span> name=<span style="color: #006080">&quot;Prenom&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@Request[&quot;</span>prenom<span style="color: #006080">&quot;]&quot;</span>   @Validation.GetHtml(<span style="color: #006080">&quot;prenom&quot;</span>) /&gt;<br />            &lt;/div&gt;<br />        <br />            &lt;div&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;Date_Nais&quot;</span>&gt;Date de naissance :&lt;/label&gt;<br />      &lt;input type=<span style="color: #006080">&quot;text&quot;</span> name=<span style="color: #006080">&quot;Date_Nais&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@Request[&quot;</span>date_nais<span style="color: #006080">&quot;]&quot;</span> @Validation.GetHtml(<span style="color: #006080">&quot;date_nais&quot;</span>) /&gt;<br />      @Html.ValidationMessage(<span style="color: #006080">&quot;date_nais&quot;</span>)<br />            &lt;/div&gt;<br />            &lt;div&gt;<br />                &lt;label <span style="color: #0000ff">for</span>=<span style="color: #006080">&quot;Email&quot;</span>&gt;Adresse mail :&lt;/label&gt;<br />      &lt;input type=<span style="color: #006080">&quot;text&quot;</span> name=<span style="color: #006080">&quot;Email&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;@Request[&quot;</span>email<span style="color: #006080">&quot;]&quot;</span> /&gt;<br />            &lt;/div&gt;<br />            &lt;div&gt;<br />                &lt;label&gt; &lt;/label&gt;<br />                &lt;input type=<span style="color: #006080">&quot;submit&quot;</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">&quot;Enregistrer&quot;</span> <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;submit&quot;</span> /&gt;<br />            &lt;/div&gt;<br />        &lt;/fieldset&gt;<br />    &lt;/form&gt;       <br />    &lt;/body&gt;<br />&lt;/html&gt;<br /></pre>
<p></div>
<p>Procédons à l’enregistrement des modifications qui ont été apportées à notre page et lançons l’exécution de celle-ci, en cliquant sur le bouton Run de la boite d’outils, et en sélectionnant le navigateur dans le lequel nous souhaitons que la page s’exécute.</p>
<p>Et à l’exécution, nous obtenons les résultats suivants en cas d’erreur :</p>
<p><img src="http://blog.developpez.com/media/validation1.PNG" width="516" height="424" alt="" /></p>
<p><img src="http://blog.developpez.com/media/validation2.PNG" width="502" height="388" alt="" /></p>
<p>Désormais vous avez à votre disposition plusieurs alternatives avec WebMatrix et WebPages, pour fournir une bonne expérience utilisateur dans votre application Web en ce qui concerne la validation des données.</p>
<p><strong>Sur le même sujet :</strong></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10537/">WebMatrix 2 bêta : intégrer l’authentification Twitter à son site Web</a></p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10518/">WebMatrix 2 bêta : support amélioré pour PHP avec l’IntelliSense</a> ;</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10495/">WebMatrix : retour d’expérience sur l&rsquo;EDI Web</a> ;</p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/web/webmatrix-decouverte-et-prise-main-outil-developpement-web-gratuit-tout/">Découverte et prise en main de WebMatrix</a> ;</p>
<p> &#8211; <a href="http://rdonfack.developpez.com/tutoriels/dotnet/webmatrix-utilisation-helpers-et-galerie-applications/">WebMatrix : utilisation des Helpers Razor et de la galerie d&rsquo;applications</a> ;</p>
<p> &#8211; <a href="http://blog.developpez.com/lilroma/p10084/net/title-198/">Comment activer et utiliser xdebug avec WebMatrix</a> ; </p>
<p> &#8211; <a href="http://aka.ms/webmatrix2blog">Télécharger WebMatrix 2 bêta</a> .  </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
