by Nicolas Calvi
27. avril 2009 15:11
Il m'est arrivé récemment d'avoir un problème de référencement de me scripts JavaSript dans ma MasterPage. En effet ayant une arborescence compliquée (cf. ci-dessous), les chemins des fichiers se perdent un peu au moment du rendu.
> Site (Contient des pages qui implémente mes MasterPage)
> Scripts (Contient mes fichiers js)
> Master (Contient mes MasterPage)
> CollectionPage1 (Contient des pages qui implémente mes MasterPage)
> CollectionPage2 (Contient des pages qui implémente mes MasterPage)
> CollectionPage3 (Contient des pages qui implémente mes MasterPage)
La question est donc : Comment référencer des scripts dans une MasterPage afin que le chemin soit toujours juste, et ce, peux importe ou se trouve ma page dans mon arborescence projet ? La réponse est de référencer les scripts dans l'événement Page_PreRender de la MasterPage (ou page) et faire un ResolveUrl sur le chemin du script, afin qu'a chaque rendu, la MasterPage puisse trouver le script sans problème, peut importe la page qui l'appelle.
protected void Page_PreRender(object sender, EventArgs e)
{
this.Page.ClientScript.RegisterClientScriptInclude("MonScript1", this.ResolveUrl("~/Scripts/MonScript1.js"));
this.Page.ClientScript.RegisterClientScriptInclude("MonScript2", this.ResolveUrl("~/Scripts/MonScript2.js"));
this.Page.ClientScript.RegisterClientScriptInclude("MonScript3", this.ResolveUrl("~/Scripts/MonScript3.js"));
}
by Nicolas Calvi
9. janvier 2009 14:58
Suite au billet publié récement sur comment créer une propriété dans le ViewState, l'un de mes collègues (Guillaume ROUCHON) m'a alerté sur le fait que cela pouvait être optimisé. En effet, dans l'exemple précédent, si la propriété est accédée nous affectons une valeur par défaut au ViewState si celle-ci était Null. Par cette action nous faisons grossir le ViewState par des données inutiles vu que la valeur par défaut ne change pas.
Voici donc une méthode qui permet de ne renseigner le ViewState si et seulement si la valeur stockée est différente de sa valeur par défaut :
public string MaProp
{
get
{
object value = this.ViewState["MaProp"];
if (value != null)
{
return ((string)value);
}
return (string.Empty);
}
set
{
this.ViewState["MaProp"] = null;
if ( !string.IsNullOrEmpty(value) )
{
this.ViewState["MaProp"] = value;
}
}
}
Par cette simple modification, on affecte le ViewState seulement si la valeur par défaut est différente, ce qui allège sa taille et donc les performances de la page, car cela limite sa taille et son temps de transport sur le réseau.
by Nicolas Calvi
25. novembre 2008 11:58
Une des questions qui revient souvent quand on développe en ASP.Net, c'est comment persister facilement et simplement une donnée sur une page dans le ViewState pour pouvoir la réutiliser à chaque PostBack. Avant de faire cela il faut déjà comprendre que cela à un coup.
En effet la moindre information persistée dans le ViewState prend beaucoup de place et donc alourdit la page et son chargement, il faut donc l'utiliser avec beaucoup de précaution. Il faut savoir aussi que seules les données sérialisables peuvent être ajoutées au ViewState.
Ensuite il suffit de procéder comme ceci pour créer sa propriété dans sa page :
public string MaProp
{
get
{
if ( this.ViewState["MaProp"] == null )
{
this.ViewState["MaProp"] = String.Empty;
}
return((string)this.ViewState["MaProp"]);
}
set
{
this.ViewState["MaProp"] = value;
}
}
Vous pouvez remarquer que le nom de la clé dans le ViewState est la même que ma propriété, même si cela n'est pas obligatoire cela permet une meilleurs relecture et ajoute une cohérence à notre code.
Dans le cadre du GET je test si le ViewState possède déjà ma clé, si ce n'est pas le cas on lui affecte une valeur par défaut pour permettre une initialisation automatique, pensez à bien caster le retour du GET.