<?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; Crystal Report</title>
	<atom:link href="https://blog.developpez.com/lilroma/pcategory/net/asp-net/crystal-report/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>Résoudre l’erreur : &#160;&#187; The type initializer for &#8216;CrystalDecisions.ReportSource.ReportSourceFactory&#8217; threw an exception &#171;&#160;</title>
		<link>https://blog.developpez.com/lilroma/p10785/net/resoudre_l_erreur_the_type_initializer_f</link>
		<comments>https://blog.developpez.com/lilroma/p10785/net/resoudre_l_erreur_the_type_initializer_f#comments</comments>
		<pubDate>Sat, 03 Mar 2012 09:02:22 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Crystal Report]]></category>
		<category><![CDATA[Windows Forms]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Travaillant récemment sur une application Windows Forms sur Visual Studio 2010 avec un système d’exploitation Windows 7 x64, j’ai eu un problème assez bizarre après avoir généré une première Build de l’application pour des tests. A ma grande surprise, mon &#8230; <a href="https://blog.developpez.com/lilroma/p10785/net/resoudre_l_erreur_the_type_initializer_f">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Travaillant récemment sur une application Windows Forms sur Visual Studio 2010 avec un système d’exploitation Windows 7 x64, j’ai eu un problème assez bizarre après avoir généré une première Build de l’application pour des tests.</p>
<p>A ma grande surprise, mon application qui fonctionnait normalement précédemment m’affichait subitement l’exception suivante lors du chargement du formulaire main : « <strong>T<em>he type initializer for &lsquo;CrystalDecisions.ReportSource.ReportSourceFactory&rsquo; threw an exception</em></strong> ».</p>
<p>Après quelques petites heures de recherche, j’ai trouvé la solution pour lever cette exception. Il suffit simplement de modifier la plateforme cible lors de la compilation du projet.</p>
<p>Pour cela, cliquez sur le menu Projet, sélectionnez l’option propriétés de l’application. Dans la fenêtre des propriétés, sélectionnez l’onglet Build. Déroulez ensuite la zone Platform target et choisissez x86. Enregistrez et c’est tout.</p>
<p><img src="http://blog.developpez.com/media/erreurcrystal.png" width="735" height="437" alt="" /> </p>
<p>À la prochaine exécution de l’application, cette exception ne s’affichera plus <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>2</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 4 Developer Preview : jQuery Mobile, View Switcher et Browser Overriding</title>
		<link>https://blog.developpez.com/lilroma/p10343/net/asp_net_mvc_4_developer_preview_jquery_m</link>
		<comments>https://blog.developpez.com/lilroma/p10343/net/asp_net_mvc_4_developer_preview_jquery_m#comments</comments>
		<pubDate>Tue, 04 Oct 2011 08:59:01 +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[Crystal Report]]></category>
		<category><![CDATA[Mobiles]]></category>
		<category><![CDATA[Nuget]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans mon précédent billet de blog, nous avons créé notre première application mobile en utilisant le nouveau Template qu’apporte ASP.NET MVC 4. Nous avons également découvert une puissance fonctionnalité introduite par le Framework Web pour le soutien des modes d’affichage. &#8230; <a href="https://blog.developpez.com/lilroma/p10343/net/asp_net_mvc_4_developer_preview_jquery_m">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans mon <a href="http://blog.developpez.com/lilroma/p10326/">précédent billet de blog</a>, nous avons créé notre première application mobile en utilisant le nouveau Template qu’apporte ASP.NET MVC 4. Nous avons également découvert une puissance fonctionnalité introduite par le Framework Web pour le soutien des modes d’affichage. </p>
<p>Avec ces nouveautés, nous avons sans apporter aucune modification à nos modèles et contrôleurs, créé des vues personnalisées pour les navigateurs Desktop et les navigateurs mobiles.</p>
<p>Dans ce billet, nous verrons comment procéder autrement en utilisant le package Nuget JQuery.Mobile.MVC.</p>
<p><span id="more-64"></span></p>
<p>Le package jQuery.Mobile.MVC installe la librairie JQuery Mobile qui va permettre la création des interfaces Web optimisées pour les smartphones et autres terminaux tactiles, ainsi que plusieurs autres fichiers pour faciliter la tâche au développeur.  </p>
<p>Ouvrons notre application ASP.NET MVC 4 avec votre éditeur Visual Studio 2010 SP 1 ou Visual Web Developper Express 2010 SP 1.</p>
<p>Nous allons dans un premier temps intégrer la bibliothèque JavaScript à notre projet en utilisant le gestionnaire de packages Nuget.</p>
<p>Pour cela, nous allons faire  un clic droit sur notre projet dans l’explorateur de solution. Dans le menu contextuel qui s’affiche, sélectionnons « Manage Nuget Packages ».</p>
<p>La fenêtre de gestion des packages Nuget s’affiche. Nous devons rechercher le package jQuery.Mobile.MVC en tapant son nom dans la zone de recherche.</p>
<p><img src="http://blog.developpez.com/media/JQuery.MVC.PNG" width="572" height="445" alt="" /> </p>
<p>Nous allons ensuite cliquer sur Install pour que Nuget télécharger et installe automatiquement dans notre projet le package ainsi que toutes ses dépendances.</p>
<p>Nous allons nous rendre compte que plusieurs fichiers ont été ajoutés au projet, dont un nouveau fichier <strong>_Layout.Mobile.cshtml</strong>, <strong>_ViewSwitcher.cshtml</strong> ou encore <strong>ViewSwitcherController.cs</strong>.</p>
<p><img src="http://blog.developpez.com/media/Switcher.PNG" width="287" height="400" alt="" /></p>
<p>Procédons maintenant à l’exécution de notre page pour voir ce qui sera affiché à l’écran en utilisant notre navigateur Firefox, et en définissant comme agent utilisateur iPhone (voir <a href="http://blog.developpez.com/lilroma/p10326/">mon précédent billet de blog</a> pour définir l’agent utilisateur sous Firefox).</p>
<p><img src="http://blog.developpez.com/media/runwebsite5.PNG" width="334" height="448" alt="" /></p>
<p><strong>View Switcher.</strong></p>
<p>Revenons maintenant voir ce qui se trouve sous le capot.</p>
<p>Sur la page affichée dans notre navigateur, nous remarquons qu’une bande noire s’est ajoutée en début de celle-ci avec un lien permettant de basculer sur la vue desktop de la page.</p>
<p>D’où provient cette bande ?</p>
<p>Ouvrons avec notre éditeur la page affichée à l’écran (Index.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: 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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    ViewBag.Title = <span style="color: #006080">&quot;Home Page&quot;</span>;<br />}<br /><br />&lt;h2&gt;@ViewBag.Message&lt;/h2&gt;<br />&lt;p&gt;<br />    To learn more about ASP.NET MVC visit &lt;a href=<span style="color: #006080">&quot;http://asp.net/mvc&quot;</span> title=<span style="color: #006080">&quot;ASP.NET MVC Website&quot;</span>&gt;http:<span style="color: #008000">//asp.net/mvc&lt;/a&gt;.</span><br />&lt;/p&gt;<br /><br />&lt;ul data-role=<span style="color: #006080">&quot;listview&quot;</span> data-inset=<span style="color: #006080">&quot;true&quot;</span>&gt;<br />    &lt;li data-role=<span style="color: #006080">&quot;list-divider&quot;</span>&gt;Navigation&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;About&quot;</span>, <span style="color: #006080">&quot;About&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;Contact&quot;</span>, <span style="color: #006080">&quot;Contact&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />&lt;/ul&gt;</pre>
<p></div>
<p>À première vue, on se rend compte qu’aucune modification n’a été effectuée dans ce fichier.</p>
<p>Puisque ce fichier est intégré dans le Layout avant d’être affiché, jetons maintenant un coup d’œil sur notre fichier _Layout.Mobile.cshtml. Nous allons apercevoir 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;">@Html.Partial(<span style="color: #006080;">"_ViewSwitcher"</span>)</pre>
<p></div>
<p>Qui fait référence à la vue partielle _ViewSwitcher.cshtml. C’est cette vue qui ajoute un lien sur toutes les pages mobiles permettant de basculer du mode d’affichage mobile pour Desktop et vice-versa. Par défaut, elle n’est pas incluse dans les vues Desktop. Pour remédier à cela, vous pouvez juste copier @Html.Partial(&laquo;&nbsp;_ViewSwitcher&nbsp;&raquo;) dans le fichier _Layout.Mobile.cshtml et le coller dans le fichier _Layout.cshtml.</p>
<p>Dans le code de la vue partielle ViewSwitcher, la méthode <strong>GetOverriddenBrowser()</strong> est utilisée pour retourner un objet   HttpBrowserCapabilitiesBase,  qui va donner des informations sur les capacités du navigateur qui a fait la demande. La propriété IsMobileDevice retourne une valeur booléenne permettant de savoir si c’est un navigateur mobile qui effectue la demande.</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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@<span style="color: #0000ff">if</span> (Request.Browser.IsMobileDevice &amp;&amp; Request.HttpMethod == <span style="color: #006080">&quot;GET&quot;</span>)<br />{<br />    &lt;div <span style="color: #0000ff">class</span>=<span style="color: #006080">&quot;view-switcher ui-bar-a&quot;</span>&gt;<br />        @<span style="color: #0000ff">if</span> (ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice)<br />        {<br />            @: Displaying mobile view<br />            @Html.ActionLink(<span style="color: #006080">&quot;Desktop view&quot;</span>, <span style="color: #006080">&quot;SwitchView&quot;</span>, <span style="color: #006080">&quot;ViewSwitcher&quot;</span>, <span style="color: #0000ff">new</span> { mobile = <span style="color: #0000ff">false</span>, returnUrl = Request.Url.PathAndQuery }, <span style="color: #0000ff">new</span> { rel = <span style="color: #006080">&quot;external&quot;</span> })<br />        } <br />        <span style="color: #0000ff">else</span> <br />        {<br />            @: Displaying desktop view<br />            @Html.ActionLink(<span style="color: #006080">&quot;Mobile view&quot;</span>, <span style="color: #006080">&quot;SwitchView&quot;</span>, <span style="color: #006080">&quot;ViewSwitcher&quot;</span>, <span style="color: #0000ff">new</span> { mobile = <span style="color: #0000ff">true</span>, returnUrl = Request.Url.PathAndQuery }, <span style="color: #0000ff">new</span> { rel = <span style="color: #006080">&quot;external&quot;</span> })<br />        }<br />    &lt;/div&gt;<br />}</pre>
<p></div>
<p><strong>Browser Overriding</strong></p>
<p>Penchons-nous maintenant sur le contrôleur qui est associé à cette vue.</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: 300px; 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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><br /><span style="color: #0000ff">using</span> System.Web.Mvc;<br /><span style="color: #0000ff">using</span> System.Web.WebPages;<br /><br /><span style="color: #0000ff">namespace</span> MvcApplication3.Controllers<br />{<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ViewSwitcherController : Controller<br />    {<br />        <span style="color: #0000ff">public</span> RedirectResult SwitchView(<span style="color: #0000ff">bool</span> mobile, <span style="color: #0000ff">string</span> returnUrl) {<br />            <span style="color: #0000ff">if</span> (Request.Browser.IsMobileDevice == mobile)<br />                HttpContext.ClearOverriddenBrowser();<br />            <span style="color: #0000ff">else</span><br />                HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop);<br /><br />            <span style="color: #0000ff">return</span> Redirect(returnUrl);<br />        }<br />    }<br />}</pre>
<p></div>
<p>Le View Switcher utilise une nouvelle fonctionnalité &laquo;&nbsp;Browser Overriding&nbsp;&raquo;, permettant de traiter les demandes d’une application comme  si elles provenaient d’un autre navigateur (Agent utilisateur).</p>
<p>Le Browser Overriding est une caractéristique de base d’ASP.NET MVC 4, et peut de ce fait être utilisé même si vous n’avez pas installé le package jQuery.Mobile.MVC. Avec cette fonctionnalité, en fonction du lien sur lequel l’utilisateur à cliquer (Desktop view ou Mobile view), le contrôleur de la vue Switcher va simuler un agent utilisateur (BrowserOverride.Mobile ou BrowserOverride.Desktop) qui sera utilisé pour charger les vues correspondantes au choix de l’utilisateur malgré que l’agent utilisateur transmit par son navigateur ne soit pas le même.</p>
<p>Le code ci-dessous va donc permettre de substituer l’agent utilisateur du navigateur. Par défaut, les données sur l’agent utilisateur simulé sont stockées en utilisant un cookie. </p>
<p><strong>Conclusion</strong></p>
<p>Nous venons d’apercevoir une fois de plus la puissance fonctionnelle d’ASP.NET MVC 4 pour le développement d’application mobile et Web. Dans le prochain billet de blog, notre attention sera portée sur le Template Web du Framework.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 4 Developer Preview : nouveautés pour la prise en charge des mobiles</title>
		<link>https://blog.developpez.com/lilroma/p10326/net/asp_net_mvc_4_developer_preview_nouveaut</link>
		<comments>https://blog.developpez.com/lilroma/p10326/net/asp_net_mvc_4_developer_preview_nouveaut#comments</comments>
		<pubDate>Fri, 30 Sep 2011 10:05:32 +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[Crystal Report]]></category>
		<category><![CDATA[RAZOR]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans l’un de mes précédents billets de blog, j’avais déjà annoncé la disponibilité immédiate en téléchargement de la version Developer Preview du Framework Web ASP.NET MVC 4. J’avais également indiqué dans cet article que je reviendrais prochainement en détail sur &#8230; <a href="https://blog.developpez.com/lilroma/p10326/net/asp_net_mvc_4_developer_preview_nouveaut">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans l’un de mes précédents billets de blog, j’avais déjà <a href="http://blog.developpez.com/lilroma/p10294/">annoncé la disponibilité immédiate en téléchargement</a> de la version Developer Preview du Framework Web ASP.NET MVC 4.</p>
<p>J’avais également indiqué dans cet article que je reviendrais prochainement en détail sur les nouveautés et améliorations de MVC 4.</p>
<p>Vous avez surement attendu patiemment le premier article sur le sujet, mais entre la charge de mes obligations professionnelles, mes travaux sur DVP et la finalisation de l’article sur Nuget, je n’avais plus assez de temps pour commencer à jouer avec MVC4 et partager mon retour d’expérience sur ce blog.</p>
<p>Comme le dit le dicton « mieux vaut tard que jamais », j’ai finalement eu assez de disponibilité pour me pencher sur le sujet et écrire ce billet qui sera axé principalement sur le support du mobile et des tablettes dans MVC 4.</p>
<p>Comme vous le savez certainement, l’une des principales nouveautés dans ASP.NET MVC 4 Develpper Preview est la possibilité d’écrire avec le minimum d’effort des applications Web optimisées, pouvant cibler plusieurs types de dispositifs différents (PC, Mobiles et Tablettes) ayant des écrans de différentes tailles.  </p>
<p>Au travers de cet article durant laquelle nous allons créer notre première application ASP.NET MVC pour mobile, nous découvrions les nouveautés suivantes qui ont été introduites par MVC 4 :</p>
<p>&#8211; le nouveau modèle d’application mobile;</p>
<p>&#8211; Modes d’affichage (Display Modes)</p>
<p>       * le mécanisme de basculement entre la vue mobile et la vue desktop d’une application ;</p>
<p>       * la création des vues spécifiques en fonction des dispositifs (iPhone, Windows Phone, etc.).</p>
<p><span id="more-63"></span></p>
<p><strong>Création de l’application</strong></p>
<p>Vous devez disposer de Visual Studio 2010 SP 1 et d’ASP.NET MVC 4 Developer Preview.</p>
<p>Pour tester les exemples, j’ai utilisé le navigateur Firefox et l’extension User Agent Switcher permettant de faire passer son navigateur Web pour celui d’un smartphone.</p>
<p>Après avoir vérifié que vous disposez des outils nécessaires, lancez votre EDI Visual Studio et procédez à la création d’un nouveau projet.</p>
<p>Dans la fenêtre « Nouveau Projet », sélectionnez ASP.NET MVC 4 Web Application et cliquez sur OK.</p>
<p><img src="http://blog.developpez.com/media/NewProject.PNG" width="802" height="548" alt="" /> </p>
<p>La fenêtre contenant les modèles de projets ASP.NET MVC 4 s’affiche. Vous vous rendez compte qu’il existe un nouveau modèle spécialement destiné aux mobiles. Sélectionnez ce modèle et validez sur OK.</p>
<p><img src="http://blog.developpez.com/media/MobilesTemplates.PNG" width="576" height="526" alt="" /> </p>
<p>Le projet est généré par Visual Studio avec une arborescence similaire à celle des applications desktop ASP.NET MVC standard.</p>
<p><strong>Quoi de neuf dans ce projet</strong></p>
<p>  Comme je l’ai souligné plus haut, à première vue, votre projet est assez similaire à celui d’une application ASP.NET Web.</p>
<p>En observant de plus près l’arborescence de celui-ci dans l’explorateur de solution de Visual Studio, vous vous rendrez compte de l’utilisation d’une autre bibliothèque JavaScript à savoir : JQuery Mobile. </p>
<p><img src="http://blog.developpez.com/media/solutionexplorer.PNG" width="315" height="559" alt="" /> </p>
<p>En effet, le modèle de projet mobile ASP.NET MVC 4 est basé sur la célèbre bibliothèque JavaScript jQuery mobile  qui a été conçue sur le socle de  jQuery et jQuery UI  pour fournir une expérience utilisateur fluide sur les smartphones et tablettes.</p>
<p>Le modèle et le contrôleur dans votre solution restent sans changement  et les vues reposent sur le moteur Razor.</p>
<p>Lancez l’exécution de l’application dans votre navigateur, et vous obtiendrez le résultat suivant à l’affichage :  </p>
<p><img src="http://blog.developpez.com/media/runwebsite.PNG" width="335" height="412" alt="" /></p>
<p>Ouvrez maintenant le fichier _Layout.cshtml et observez la portion de lignes de code suivante :</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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;head&gt; <br />        &lt;meta charset=<span style="color: #006080">&quot;utf-8&quot;</span> /&gt;<br />        &lt;title&gt;@ViewBag.Title&lt;/title&gt; <br />        &lt;meta name=<span style="color: #006080">&quot;viewport&quot;</span> content=<span style="color: #006080">&quot;width=device-width&quot;</span> /&gt;<br />        &lt;link rel=<span style="color: #006080">&quot;stylesheet&quot;</span> href=<span style="color: #006080">&quot;@Url.Content(&quot;</span>~/Content/jquery.mobile-1.0b2.min.css<span style="color: #006080">&quot;)&quot;</span> /&gt;<br />        &lt;link rel=<span style="color: #006080">&quot;stylesheet&quot;</span> href=<span style="color: #006080">&quot;@Url.Content(&quot;</span>~/Content/Site.css<span style="color: #006080">&quot;)&quot;</span> /&gt;<br />        &lt;script type=<span style="color: #006080">&quot;text/javascript&quot;</span> src=<span style="color: #006080">&quot;@Url.Content(&quot;</span>~/Scripts/jquery-1.6.2.min.js<span style="color: #006080">&quot;)&quot;</span>&gt;&lt;/script&gt;<br />        &lt;script type=<span style="color: #006080">&quot;text/javascript&quot;</span>&gt;<br />            $(document).bind(<span style="color: #006080">&quot;mobileinit&quot;</span>, function() {<br />                <span style="color: #008000">// As of Beta 2, jQuery Mobile's Ajax navigation does not work in all cases (e.g.,</span><br />                <span style="color: #008000">// when navigating from a mobile to a non-mobile page, or when clicking &quot;back&quot;</span><br />                <span style="color: #008000">// after a form post), hence disabling it.</span><br />                $.mobile.ajaxEnabled = <span style="color: #0000ff">false</span>;<br />            });<br />        &lt;/script&gt;<br />        &lt;script type=<span style="color: #006080">&quot;text/javascript&quot;</span> src=<span style="color: #006080">&quot;@Url.Content(&quot;</span>~/Scripts/jquery.mobile-1.0b2.min.js<span style="color: #006080">&quot;)&quot;</span>&gt;&lt;/script&gt;<br />    &lt;/head&gt; <br /></pre>
<p></div>
<p>Vous remarquez 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;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta</span> <span style="color: #ff0000;">name</span><span style="color: #0000ff;">="viewport"</span> <span style="color: #ff0000;">content</span><span style="color: #0000ff;">="width=device-width"</span> <span style="color: #0000ff;">/&gt;</span></pre>
<p></div>
<p>Pour un site Web classique de largeur par exemple 980px, le navigateur mobile va se charge de redimensionner tout proportionnellement. Du coup, à l’affichage, l’on peut se retrouver avec des caractères beaucoup trop petits, carrément illisibles. Pour palier à cela, le meta tag viewport qui est reconnu par pratiquement tous les navigateurs mobiles (Opera mobile, Safari, Firefox pour Android, Internet Explorer, etc.) a été introduit.</p>
<p>La définition de cette balise dans votre page permet de dire au navigateur que celle-ci est particulièrement optimisée pour le mobile. Le navigateur se charge donc d’adapter automatiquement le contenu de votre page de telle sorte qu’il soit bien lisible en fonction de la résolution du terminal sur lequel l&rsquo;application sera exécutée.</p>
<p>Commentez un peu cette ligne dans le fichier _Layout.cshtml, et exécutez votre page pour voir concrètement ce qui sera affiché à l’écran.</p>
<p>Pour mémoire, pour commenter une ligne avec Razor, vous pouvez procéder 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;meta name=<span style="color: #006080;">"viewport"</span> content=<span style="color: #006080;">"width=device-width"</span> /&gt;*@</pre>
<p></div>
<p>Et vous obtenez le résultat suivant à l’exécution :</p>
<p><img src="http://blog.developpez.com/media/runwebsite2.PNG" width="241" height="362" alt="" /></p>
<p>Comme vous pouvez le constater, le texte dans mon navigateur est carrément illisible.</p>
<p><strong>Basculement entre la vue mobile et la vue desktop</strong></p>
<p>Nous avons créé notre site pour mobile et nous maitrisons déjà quelques rudiments pour son développement. C’est bien, mais maintenant que notre application sera accessible à la fois sur les navigateurs de bureau et sur les mobiles, comment définir des contenus qui seront propres à chaque type de dispositif ?</p>
<p>ASP.NET MVC 4 introduit un mécanisme permettant de faciliter la personnalisation des interfaces en fonction de l’appareil de l’utilisateur. Ainsi, avec le minimum d’effort, le développeur pourra facilement remplacer ses vues, Layouts et vues partielles pour des navigateurs mobiles en générale ou des navigateurs particuliers.</p>
<p>Pour créer une vue spécifique pour des navigateurs mobiles, vous devez simplement dupliquer le fichier de vue et ajouter au nom de celui-ci .Mobile.</p>
<p>Pour exemple, vous allez créer une copie de votre fichier Index.cshtml qui sera renommé en <strong>Index.Mobile.cshtml</strong>.</p>
<p>Dans ce fichier, vous allez modifier le code comme suit :</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: 300px; 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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    ViewBag.Title = <span style="color: #006080">&quot;Home Page&quot;</span>;<br />}<br /><br />&lt;h2&gt;Mon premier site pour mobile&lt;/h2&gt;<br />&lt;p&gt;<br />   Ceci est la version mobile de mon site qui parle de tout et de rien. &lt;br /&gt;<br />    Vous y découvrirez des astuces sur la programmation .NET, des bouts de code et bla bla bla<br />&lt;/p&gt;<br /><br />&lt;ul data-role=<span style="color: #006080">&quot;listview&quot;</span> data-inset=<span style="color: #006080">&quot;true&quot;</span>&gt;<br />    &lt;li data-role=<span style="color: #006080">&quot;list-divider&quot;</span>&gt;Navigation&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;Astuces&quot;</span>, <span style="color: #006080">&quot;About&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;Code&quot;</span>, <span style="color: #006080">&quot;Contact&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />&lt;/ul&gt;<br /></pre>
<p></div>
<p>Et à l’exécution avec un navigateur mobile, vous vous rendez compte que c’est le fichier Index.Mobile.cshtml qui est désormais affiché.</p>
<p><img src="http://blog.developpez.com/media/runwebsite3.PNG" width="328" height="457" alt="" /></p>
<p><strong>Création des vues spécifiques en fonction des dispositifs</strong></p>
<p>Nous pouvons désormais développer deux versions de notre application qui seront chargées automatiquement en fonction du type de navigateur (Mobile ou Desktop). C’est parfait, mais si nous voulons avoir des contenus personnalisés en fonction de la plateforme d’exécution (Android, Windows Phone, iOS) de l’utilisateur, comment devrons-nous procéder ?</p>
<p>Pas de souci. En effet, avec ASP.NET MVC 4, vous pouvez créer des vues spécifiques qui seront affichées en fonction de l’OS sur lequel sera exécutée votre application.</p>
<p>Pour cela, dans la procédure Application_Start de votre fichier Global.asax.cs, vous devez définir vos propres règles d’affichage en ajoutant 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;">DisplayModes.Modes.Insert(0, <span style="color: #0000ff;">new</span> DefaultDisplayMode(<span style="color: #006080;">"iPhone"</span>)<br />           {<br />               ContextCondition = (ctx =&gt; ctx.Request.UserAgent.IndexOf(<br />                   <span style="color: #006080;">"iPhone"</span>, StringComparison.OrdinalIgnoreCase) &gt;= 0)<br />           });</pre>
<p></div>
<p>Le code ci-dessous sera utilisé pour l’iPhone. Pour un autre système, remplacez juste iPhone par le nom de l’OS (Android, WindowsPhone, etc.).</p>
<p>Le code complet de la procédure Application_Start() 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: 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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> Application_Start()<br />        {<br />            AreaRegistration.RegisterAllAreas();<br /><br />            RegisterGlobalFilters(GlobalFilters.Filters);<br />            RegisterRoutes(RouteTable.Routes);<br /><br />            DisplayModes.Modes.Insert(0, <span style="color: #0000ff">new</span> DefaultDisplayMode(<span style="color: #006080">&quot;iPhone&quot;</span>)<br />            {<br />                ContextCondition = (ctx =&gt; ctx.Request.UserAgent.IndexOf(<br />                    <span style="color: #006080">&quot;iPhone&quot;</span>, StringComparison.OrdinalIgnoreCase) &gt;= 0)<br />            });<br />        }</pre>
<p></div>
<p>N&rsquo;oubliez pas d&rsquo;ajouter dans ce fichier une référence à l&rsquo;espace de nom System.Web.WebPages.</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> System.Web.WebPages;</pre>
<p></div>
<p>Vous pouvez maintenant créer des vues qui seront propres aux appareils iPhone en ajoutant les caractères .iPhone aux noms de vos fichiers.</p>
<p>Vous allez par exemple définir un nouveau fichier Index pour iPhone. </p>
<p>Pour cela, vous allez créer une copie de votre fichier Index.cshtml que vous allez renommer en <strong>Index.iPhone.cshtml</strong> comme l’illustre la capture ci-dessous :</p>
<p> <img src="http://blog.developpez.com/media/Explorer.PNG" width="196" height="215" alt="" /></p>
<p>Vous allez ensuite modifier le code comme suit :</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; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">@{<br />    ViewBag.Title = <span style="color: #006080">&quot;Home Page&quot;</span>;<br />}<br /><br />&lt;h2&gt;La page iPhone&lt;/h2&gt;<br />&lt;p&gt;<br />   Ceci est la version mobile de mon site qui parle de tout et de rien. &lt;br /&gt;<br />    Vous y découvrirez des astuces sur la programmation .NET, des bouts de code et bla bla bla<br />&lt;/p&gt;<br /><br />&lt;ul data-role=<span style="color: #006080">&quot;listview&quot;</span> data-inset=<span style="color: #006080">&quot;true&quot;</span>&gt;<br />    &lt;li data-role=<span style="color: #006080">&quot;list-divider&quot;</span>&gt;Navigation&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;Astuces&quot;</span>, <span style="color: #006080">&quot;About&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />    &lt;li&gt;@Html.ActionLink(<span style="color: #006080">&quot;Code&quot;</span>, <span style="color: #006080">&quot;Contact&quot;</span>, <span style="color: #006080">&quot;Home&quot;</span>)&lt;/li&gt;<br />&lt;/ul&gt;</pre>
<p></div>
<p>Vous pouvez maintenant exécuter votre application, en prenant la peine de modifier le User Agent de Firefox pour qu’il se comporte comme l’iPhone 3.0.</p>
<p><img src="http://blog.developpez.com/media/UserAgent.PNG" width="445" height="223" alt="" /></p>
<p>Et à l’exécution de vote page, vous obtenez le résultat suivant :</p>
<p><img src="http://blog.developpez.com/media/runwebsite4.PNG" width="313" height="446" alt="" /></p>
<p><strong>Conclusion</strong></p>
<p>Au travers de cet article, nous venons de découvrir quelques nouveautés qu’introduit ASP.NET pour les mobiles et comment il est relativement facile de concevoir une application Web mobile et définir des vues personnalisées qui seront affichées en fonction du terminal sur lequel sera exécutée l’application.</p>
<p>Il existe une seconde alternative pour la gestion des modes d&rsquo;affichage en utilisant JQuery.Mobile.MVC. Ce sera l’objet de notre prochain billet de blog.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
