PROJET AUTOBLOG


HowTommy

source: HowTommy

⇐ retour index

Récupérer la valeur de l'attribut Display Name d'une propriété en ASP.Net MVC

mardi 8 octobre 2013 à 17:37
Lorsqu'on développe en ASP.Net MVC, on a parfois besoin d'afficher un label avec un nom clair pour une des propriétés de notre ViewModel. Chose que nous faisons avec l'attribut "Display" :

[Display(Name = "Nom complet")]
[StringLength(50)]
public string NomComplet { get; set; }

Nous pouvons ensuite afficher notre label correspondant à l'aide de :

@Html.LabelFor(model => model.NomComplet)

Sauf que le code généré sera un objet html "Label", sous la forme :

<label for="NomComplet">Nom complet</label>

Donc pas toujours exploitable. En effet, il se peut que nous n'ayons besoin que de la valeur de l'attribut Display(Name) !

Et bien en fait... La solution est très simple, il suffit d'utiliser :

@Html.DisplayNameFor(model => model.NomComplet)

Evident non ? Pourtant je suis passé à côté et je l'avais recodé à la main :

public static MvcHtmlString GetDisplayName<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
	var metaData = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
	string displayName = metaData.DisplayName ?? (metaData.PropertyName ?? ExpressionHelper.GetExpressionText(expression));
	return MvcHtmlString.Create(displayName);
}

La solution est parfois juste sous nos yeux...

EDIT : Sauf que voilà ! Il y a un piège ! Ce que le DisplayNameFor renvoie est encodé en HTML (vu qu'il s'agit d'une MvcHtmlString) !

Du coup, deux possibilités pour récupérer notre label sans l'encodage HTML :

Utiliser Html.Raw et HttpUtility.Decode :

@Html.Raw(HttpUtility.HtmlDecode(Html.DisplayNameFor(model => model.NomComplet).ToString()))

Ou alors utiliser une version modifiée du GetDisplayName créé précédemment :

public static IHtmlString GetDisplayName<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
	var metaData = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
	string displayName = metaData.DisplayName ?? (metaData.PropertyName ?? ExpressionHelper.GetExpressionText(expression));
	return htmlHelper.Raw(displayName);
}

Utiliser des tables comme paramètres dans SQL Server

mardi 8 octobre 2013 à 10:10
Quand on travaille avec SQL Server, on finit souvent par avoir besoin de passer une liste d'éléments à une procédure stockée.

En effet, lorsqu'on a besoin de mettre des milliers de lignes à jour, ou de supprimer de nombreuses lignes dont on possède les IDs côté code, il est un peu dommage d'appeler de nombreuses fois la même procédure stockée alors qu'un seul appel suffirait !

Et bien une solution efficace existe : les Table Valued Parameters !

J'ai rédigé, pour le blog de ma société, un petit article à ce sujet que vous pourrez trouver ici :

Faire des updates efficaces grâce aux Table Valued Parameters

Bonne lecture !

DynDns, la trahison

vendredi 4 octobre 2013 à 13:00


DynDns, vous connaissez ? C'est le plus connu et le plus utilisé des services de redirection DNS dynamique.

Pour ceux qui ne connaissent pas, un DNS dynamique est un service qui va faire correspondre en permanence votre adresse IP et un nom de domaine choisi. Quel est l'intérêt ? Tout simplement pouvoir avoir un nom de domaine qui pointe en permanence sur son adresse IP, et ainsi pouvoir héberger chez soi, sur sa box ou sur ses PCs, différents services internet (un site internet, un FTP, un service de messagerie, un accès à son NAS, etc.).

Comment ça fonctionne ? C'est très simple, la majorité des box / modems / routeurs possèdent une section de configuration dyndns qui permet de renseigner les informations de son compte dyndns pour aller ensuite régulièrement mettre à jour l'adresse IP associée à votre nom de domaine.

Ainsi, à une époque, j'hébergeais de petits sites web sur mon adresse monancienpseudo.dyndns.com !

Le souci, c'est que, depuis quelques années, les fabricants de matériel ont commencé à retirer des fournisseurs de DNS dynamiques de leurs équipements. Ainsi, on est passé de 5/6 fournisseurs en 2009 à 1 seul aujourd'hui : DynDns (ou dyn.com désormais).

Mais voilà, DynDns s'étant retrouvé en position de monopole à ce niveau (car pas le choix, les modems / routeurs ne permettent plus que l'utilisation de ce service), il a décidé de supprimer son offre gratuite. Totalement. Et oui.

Vous voulez juste héberger un mini site web chez vous ou vous donner l'accès à votre NAS à distance ? Vous devez payer. Votre caméra IP ne fonctionne qu'avec DynDNS ? Vous devez payer. Et oui.

Pitoyable non ?

Je ne vois pas de bonne solution, aujourd'hui, pour faire de l'autohébergement ou pouvoir accéder à son NAS en toutes circonstances...


Allez, bon weekend !

Photo Credit: EmreAyar via Compfight cc

Problème de PC étrange...

lundi 23 septembre 2013 à 09:00


Aujourd'hui, je vais vous parler d'un problème de PC auquel je ne comprends vraiment rien...

Depuis plusieurs mois, j'avais de sérieux problèmes avec mon ordinateur, à savoir :

Bref, utiliser mon ordinateur était devenu compliqué.

Je me suis alors lancé dans une lourde série de correctifs et de diagnostics, à savoir :

J'en étais arrivé à la conclusion qu'un de mes composants était mort ou mourant, c'est à dire soit la carte graphique (une GTX 560 ti), soit la carte mère.

Afin de vérifier cette hypothèse, j'ai échangé les cartes graphiques de mes deux PC (ma nVidia GTX 560 ti contre mon ancienne ATI 4890 Vapor-x).

A partir de ce moment... Je n'ai eu plus aucun problème ! Sur aucun des deux PC ! Chaque PC tourne incroyablement bien, plus d'écrans bleus, plus de perte de signal, plus de redémarrages...

Et je ne sais toujours pas d'où vient le problème ! Je commence seulement à envisager un souci très rare : une incompatibilité entre carte mère et carte graphique.

Cela vous parait-il cohérent ? Quelqu'un verrait-il une autre solution ?

Merci !

EDIT : Bon, je pense que le défaut vient bel et bien de la carte graphique. J'ai à nouveau eu un blue screen sur mon vieux PC avec la GTX 560 ti. C'est donc la carte qui est défectueuse visiblement. Dommage qu'elle ne soit plus garantie depuis 1 semaine... (sic).

Lettre ouverte à Blizzard

vendredi 20 septembre 2013 à 10:00


J'ai retrouvé, dans mes documents, cette petite lettre dédiée à Blizzard. Elle a trois mois mais je pense qu'elle est toujours d'actualité et peut intéresser certaines personnes. Bonne lecture !

Mon cher Blizzard,

Je me permet de t’écrire cette lettre, car j’ai été bien sage cette année.

En effet, dès le 15 mai 2012, je me suis acheté Diablo 3. Le 12 mars 2013, je me suis acheté Starcraft 2 : Heart Of The Swarm. Lorsque j’ai commencé sur Diablo 3, j’ai beaucoup aimé le jeu. J’ai même rédigé un test élogieux du jeu.
Je t’ai pardonné tes erreurs de jeunesse. Je t’ai pardonné ta volonté de faire de Diablo 3 un jeu 100% online, car malgré tout cela restait un bon jeu. Je t’ai pardonné les problèmes de lag et d’indisponibilités, car des problèmes ça arrive, je le sais (je travaille dans le web et l’IT). Je t’ai pardonné ton hôtel des ventes qui transformait Diablo 3 en un Pay 2 Win. Je t’ai pardonné le prix de Diablo 3 en ligne plus cher que le prix du jeu en magasin. Je t’ai pardonné beaucoup de choses. Peut-être trop ?

Seulement voilà... Plus d’un an s’est écoulé depuis la sortie de Diablo 3.
Un an pendant lequel tu as tout tenté pour garder tes joueurs. Un an pendant lequel tu as refusé de voir tes erreurs et de revenir en arrière (hôtel des ventes, mode offline, difficulté mal dosée, gameplay inintéressant, limitations dans l’histoire, ...). Un an pendant lequel tu n’as cessé de faire évoluer ton jeu à tel point qu’on a l’impression aujourd’hui que le jeu sorti il y a 1 an n'était qu'une bêta (voire une alpha ?). Un an pendant lequel tu nous sortait régulièrement des problèmes de connexion, de lag et d’indisponibilité. Un an, ou presque.

Sauf qu’aujourd’hui j’en ai assez.
Hier, j’espérais pouvoir jouer une petite heure, mais je n’ai pas pu. La latence était trop importante (entre 500 et 1000ms). La fois d’avant, c’était la même chose. La fois encore avant, c’était l’hôtel des ventes qui était inaccessible... Ce sera quoi la prochaine fois ? L’authentification qui tombera ? Une latence énorme ? La création de parties qui sera bloquée ?

Je n’en peux plus. Tu n’as rien fait pour t’améliorer, au contraire, tu persévère dans une voie que je ne suivrais pas. La voie du mépris pour tes clients, pour les joueurs qui te suivent depuis des années... La voie qui fait souffrir une majorité (full online) pour te prémunir d’une minorité (ceux qui pirateraient ton jeu).
As-tu oublié que c’est en partie grâce au piratage que tes premiers jeux ont eu du succès ? Combien de gens ont découvert Starcraft ou Diablo 2 en y jouant avec des amis ? Rien qu’à mon niveau je t’ai aidé à vendre plusieurs exemplaires de World of Warcraft, de Diablo 2, de Starcraft 2, ...
Comment peux-tu te permettre le luxe d’un jeu payant full-online injouable là où d’autres sortent des jeux gratuits et totalement jouables et stables (Path of Exile et League of Legend par exemple) ?
As-tu oublié que les gens qui jouent à tes jeux sont des joueurs, et non pas des consommateurs débiles ?
As-tu oublié que ton succès vient de tes jeux, mais surtout de ceux qui jouent à tes jeux ?

Aujourd’hui... Je te déteste Blizzard. Je n’en peux plus. L’époque de “Blizzard North” est révolue. Aujourd’hui ne reste qu’Activision-Blizzard, un autre fast-food du jeu-vidéo comme il en existe tant qui nous offre de beaux jeux bien chers et sans âmes. Combien de temps se passera-t-il avant que tu ne cède aux sirènes des DLC payants ? Peu de temps je pense...

Il est temps pour moi de t’oublier. De passer à autre chose.

Adieu Blizzard. Je vais désinstaller Diablo 3 et te souhaiter bonne route. Je ne t’oublierai pas, mais je ne reviendrai pas.