All-In-One Code Framework

by Louis-Guillaume Morand 15. janvier 2011 05:33

Lorsqu’un client a un problème particulier ou même lorsque les employées (plus spécialement les consultants) ont un souci pointu avec un produit ou une technologie, ils font appel aux équipes support, ces personnes qui connaissent les produits aussi bien que ceux qui les ont créées. Ce sont ces mêmes personnes qui, observant qu’un certain nombre de requêtes revenaient encore et encore, ont eu l’idée de créer le All-in-One Code Framework, un regroupement d’exemples de code tentant de couvrir les cas d’usages les plus courants de chaque technologie. Par exemple, pour de l’ASP.Net, vous trouverez une cinquantaine d’exemples comme :

  • Mettre en place un téléchargement de fichier avec ASP.Net MVC
  • Mettre en place d’un cache
  • Créer un flux RSS
  • Handler HTTP personnalisé
  • Ajouter l’AJAX AutoCompleteExtender
  • Faire un chat Web en AJAX
  • Avoir la liste des utilisateurs actuellement connectés (même sans MemberShip)
  • Partager une session entre différents domaines
  • Implémenter Bing Map
  • Lancer des batchs/cmd depuis une page Web
  • Gestion des thèmes
  • etc.

Au total, c’est plus de 500 exemples, augmentant chaque semaine, et sur une vingtaine de technologies différentes :

  • ASP.NET
  • Silverlight
  • Windows Azure
  • WPF
  • Windows Forms
  • Windows 7
  • Data Platform
  • Office Development
  • Windows Workflow
  • Interop and Fusion
  • Windows Base and .NET General
  • Windows UI
  • Security
  • Windows Shell
  • XML
  • COM
  • IPC and RPC
  • Diagnostics
  • Visual Studio Extensibility
  • File System
  • IIS
  • Windows Service

Le tout, téléchargeable pour l’avoir à disposition. Une fois sur votre ordinateur, une interface vous permet de lister les projets d’exemples, de voir leur description puis de les lancer directement si vous le souhaitez.

image

 

Vous pouvez découvrir ce framework sur codeplexet je vous encourage très fortement à le faire!

Tags: ,

.Net | Microsoft | ASP.Net

Sortie de la version finale d’ASP.Net MVC 3

by Louis-Guillaume Morand 13. janvier 2011 13:31

Il y a tout pile un mois, je vous parlais dans un autre billet, de la RC2 d’ASP.Net MVC 3, ce nouveau framework de développement Web permettant d’appliquer le pattern Model-View-Controller facilement à vos sites Web. Mais bien plus cela, ASP.Net est une nouvelle façon de concevoir des sites Web, plus rapidement, plus facilement, plus robustes, testables de bout en bout et apportant également une nouvelle manière d’écrire vos pages Web grâce au moteur Razor.

Ce framework est dorénavant en version finale et je vous encourage très fortement à migrer vers cette version 3 tant les fonctionnalités qu’elle apporte sont appréciables par tout développeur.

Vous pourrez trouver quelques infos complémentaires sur le sujet :

 

Il ne vous reste plus qu’à vous rendre sur le portail officiel pour télécharger ASP.Net MVC 3 et profitez des dizaines de ressources mises à votre disposition pour rapidement tirer profit de cette superbe techno Web!

Tags:

ASP.Net | MVC

Astuces pour le moteur Razor d’ASP.Net MVC 3

by Louis-Guillaume Morand 15. décembre 2010 12:25

Dans un post précédent, je présentais la sortie d’ASP.Net MVC3 ainsi que ses nouveautés. Parmi celles-ci, le moteur de rendu Razor, ce nouveau moteur simplifiant au maximum les vues MVC pour les rendre concises et clair. Adieu les tags ASP.Net dérangeant, il est possible de s’approcher du template comme nous l’aurions en PHP en mêlant directement le code C# au sein de votre XHTML

 @foreach (var item in Model) 
    { 
        <tr>
            <td>
                @{Html.ActionImage("../../Content/Images/edit-icon.gif", "Editer", "Edit",
new { id = item.Id });} | </td> <td> <a href='@item.Url' target='_blank'>@item.Title</a> </td> </tr> }

Si l’utiliser est enfantin dans la majorité des cas et rend votre vue claire et lisible comme de l’eau de roche, il n’en reste pas que dans certains cas, des astuces d’écritures seront nécessaires pour obtenir un résultat satisfaisant. Voici quatre exemples que j’ai rencontré lors de la migration d’un projet ASP.Net MVC 2 vers MVC 3 + Razor

 

Exemple numéro 1 : Générer une URL d’image dynamique

en ASP.Net MVC, nous avions quelques du genre

<img src=”images/<%=model.Id %>.gif” />

avec le moteur RAZOR, vous auriez quelque chose comme ceci

<img src=”images/@model.Id.gif” />

Malheureusement, ceci ne marche pas car le moteur est incapable de savoir si “.gif”est une propriété de notre objet ou non. Le moteur vous renvoie alors l’erreur suivante CS1061: 'string' does not contain a definition for 'gif' and no extension method 'gif' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)

  La solution consiste alors à encapsuler notre objet comme ceci :

<img src=”images/@{@model.Id}.gif” /> 
ou encore plus proprement, en utilisant simplement des parenthèses
<img src=”images/@(@model.Id).gif” /> 

Cet exemple de parenthèse pourra servir pour insérer le résultat d’un code C# comme l’exemple suivant :

@foreach (var item in Model) { 
      <tr>
            <td>@(count++)</td>
            <td>@(model.Age +1)</td>
      </tr>
}

Exemple 2 : inclusion d’éléments avec le foreach

Deuxième exemple relativement simple. Un foreach contenant un IF permettant d’insérer du HTML sous condition

<table>
    <tr>
    <% foreach (var item in Model) { 
           if(count %3 == 0 && count !=0)    
           Response.Write("</tr><tr>");
     %>
    
    <td>
        <a href="../Books/Details/<%=item.Id %>"> 
            <br /><%= Html.Encode(item.Title) %>
        </a>
    </td>
    
    <%
    count++;
       } 
     %>
    </tr>
</table>
ce qui en simple modification Razor donnerait ceci:
<table>
    <tr>
    @foreach (var item in Model) { 
           if(count %3 == 0 && count !=0)    
           {
              </tr><tr>
           }     
    <td>
        <a href="../Books/Details/@item.Id"> 
            <br />@item.Title
        </a>
    </td>
    
         count++;
    } 
    </tr>
</table>

Notez que si vous mettez un @ devant le IF, cela est signalé comme une erreur car, déjà contenu dans le foreach, le @ devient surperflu. Néanmoins, si vous l’omettez (comme le code d’exemple), alors le foreach ne trouve pas son accolade fermante et ainsi aucune solution ne convient (the foreach block is missing a closing "}" character.  Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup.). La première solution consiste alors à utiliser WriteLiteral

if(count %3 == 0 && count !=0)    
{
     WriteLiteral(</tr><tr>)
} 

mais une meilleur solution consiste à utiliser @:

if(count %3 == 0 && count !=0)    
{
     @:</tr><tr>
} 
Cette syntaxe sert à indiquer que tout ce qui suit (sur la même ligne) est à considérer comme du markup.
 
Exemple 3 : affichage de texte sans tags HTML
Il est important de savoir que le moteur de Razor analyse chaque mot du fichier de la vue pour 
détecter s’il s’agit de code ou de markup (balise HTML) pour savoir comment afficher le contenu. 
Malheureusement, en cas d’absence de tag HTML, celui-ci sera incapable de reconnaitre le texte à 
afficher.
Voici un exemple simple
@if(model.User.Role == “Administrateur”)
{
   La personne est un administrateur
}
La solution consiste à ajouter des tags HTML autour du texte
@if(model.User.Role == “Administrateur”)
{
<span>
   La personne est un administrateur
</span>
}
Mais si vous ne souhaitez vraiment pas que ces tags soient présents dans le rendu final alors il est 
possible d’utiliser la balise <text>

@if(model.User.Role == “Administrateur”)
{
<text>
   La personne est un administrateur
</text>
}
 

Exemple 4 : utilisation des helpers de vos anciens projets ASP.Net MVC 2

Lorsque vous aviez un markup HTML dynamique à afficher sur plusieurs vues, il était conseillé de créer une classe C# statique implémentant une méthode d’extension pour l’objet HtmlHelper.

public static class MenuHelper
{
        public static string Menu(this HtmlHelper helper, string titre)
        {
            return String.Format("<b>{0}</b>",titre);
        }
}

pour l’appeler ainsi dans votre code ASP.Net

<%=Html.Menu(monTitre) %>

Malheureusement, si vous l’utilisez tel quel au sein de votre code Razor:

@Html.Menu(monTitre)

Vous obtiendrez l’erreur suivante CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments ou bien selon la façon dont vous l’appelerez, le texte ne sera pas affiché où vous le souhaitez sur le HTML final.

La solution consiste alors à retourner non plus un objet string mais MvcHtmlString ou bien, dans le cas de grosse donnée à retourner, à écrire directement dans le buffer de sortie comme le montre l’exemple suivant

public static class MenuHelper
{
        public static string Menu(this HtmlHelper helper, string titre)
        {
           helper.ViewContext.Writer.Write(String.Format("<b>{0}</b>",titre));
        }
}

Exemple 5 : inclure du code Javascript dynamique dans vos pages Razor

Qui n’a jamais eu besoin de créer un code javascript dont une partie serait définie par du code C#? Code l’exemple numéro 3 plus haut, le moteur Razor est incapable de faire la différence entre le code C# et le code javascript. La même solution est alors nécessaire : l’utilisation de la balise <text>

<script type="text/javascript">
@{
    <text>
    var temp = confirm("Tu es sûr?");
    </text>
}
</script>

C’est tout pour le moment. Je viendrai compléter ce post au fil des problématiques rencontrées

 

Tags: ,

ASP.Net | MVC

ASP.Net MVC 3 : page d’authentification par défaut

by Louis-Guillaume Morand 14. décembre 2010 03:41

ASP.Net MVC3 est juste un vrai plaisir à utiliser malheureusement, elle réserver encore quelques (mauvaises) surprises.

ASP.Net possède un mécanisme d’authentification plutôt intelligent et implémentable facilement en ASP.Net MVC en plaçant des attributs Authorize sur les actions (ou le contrôleur) dont vous voulez protéger l’accès.

[Authorize]
public ActionResult Index()
{
   return View();
}

Grâce à ce simple attribut, chaque fois qu’un utilisateur tentera d’utiliser cette action, si celui-ci n’est pas authentifié alors il sera redirigé vers la page d’authentification définie dans le fichier web.config

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn"/>
</authentication>

 

Sauf que... la version 3 d’ASP.Net MVC, y compris la RC, contient un bug qui entraine une redirection automatique vers une page Account/Login. Bien entendu, cette page n’existe pas et plus embêtant, votre page d’authentification n’est jamais appelée.

En attendant que le problème soit corrigé dans la version finale (cross fingers), il existe une astuce donnée par l’équipe Microsoft : désactiver la propriété autoFormsAuthentication

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

 

Pour la RC2, il s’agit cette fois de placer

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

Tags: , ,

ASP.Net | MVC

Mettre une application Web en mode offline

by lgmorand 13. novembre 2009 09:19

Ca fait maintenant quelques année que je fais du .Net et ca fait surtout deux ans que je fais exclusivement des applications Web, ait passé toutes les certifs sur le sujet, lu moulte bouquins et pourtant j'apprend encore des choses.

Cette chose, je veux vous la partager car en en parlant autour de moi, j'ai vu différentes personnes, développeurs ASP.Net également, ne le sachant pas non plus. Il s'agit donc de quelque chose d'éventuellement pas assez connu.

Contexte : un client veut mettre en pause une application, le temps d'évolution. Nous souhaitons alors que toutes les pages du sites soit redirigéés vers une page indiquant "en travaux".

Solution : un seul et unique fichier htm.

En effet, depuis la version 2.0 d'ASP.Net, lorsque vous placez un fichier html contenant le texte de votre choix, nommé app_offline.htm (important le nom!) et que vous le placez à la racine de votre site Web, instantanément et sans redémarrage du site Web, toute requête de ce site est automatiquement redirigée vers cette page.

Il est également important que le fichier fasse AU MOINS 1octet. Si le fichier est vide, il ne sera pas pris en compte.

et voilà, c'est tout :)

Tags: ,

ASP.Net

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen