Gérer les propriétés dans le ViewState avec un simple Attribut ViewStateProperty

Cet article est particulièrement intéressant :

http://www.codeproject.com/KB/viewstate/ViewStateAttribute.aspx

J'ai décidé de le mettre en oeuvre et je dois dire que c'est vraiment très satisfaisant !

Aurevoir les lignes de codes répétitives et bonjour le côté pratique puisque en résumé, pour rendre une propriété persistante dans le ViewState, il vous suffit au final de faire :

[ViewStateProperty]
protected MaPropriete { get; set; }

Et là, je dis... Qui dit mieux ?

 

Il y a du Linq dans le code proposé, donc, si vous avez besoin de ça pour du .NET <3.0, il faudra adapter un peu le code.

Ainsi le code proposé par l'auteur :


protected MainPage()
{

      this.viewStateProperties = GetType().GetProperties(
              BindingFlags.NonPublic | BindingFlags.Instance).Where(
              p => p.GetCustomAttributes(typeof(ViewStateProperty), true).Length > 0).ToArray();

}

 

devient sans Linq :

protected MainPage()
{

      List<PropertyInfo> final = new List<PropertyInfo>();
            PropertyInfo[] liste = GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
            foreach (PropertyInfo p in liste)
            {
                if (p.GetCustomAttributes(typeof(ViewStateProperty), true).Length > 0)
                {
                    final.Add(p);
                }
            }
            this.viewStateProperties = final.ToArray();

}

Simple message : PATIENTEZ lors d'un submit

Voici un système simple lorsque vous avez une page longue à charger après un submit (changement de page d'une gridview, recherche, tri...)

Dans la MasterPage :

Loader ce script (que l'on peut mettre dans un fichier .js)

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

addLoadEvent(function() {
    document.getElementById("loading").style.display = "none";
});

function waitMessage() {
    document.getElementById('loading').style.display = '';
}

jQuery(document).ready(function() {               
                document.getElementById('loading').style.display = 'none';
});

 

Modifier le Form ASP.NET de la MasterPage :

<form id="form1" runat="server" onsubmit="javascript:waitMessage();return true;">

.....

<div id="loading"><br /><br />Please wait...<br /><br /><img src="<%=ResolveClientUrl("Images/Animation.gif")%>" /><br /></div>       

</form>

 

 

Désormais pour toutes les pages longues à charger ... C'est réglé :)

 

Et voici le CSS :

#loading
{   
     width: 280px;
     height: 100px;
     background-color: #c0c0c0;
     position: absolute;
     left: 50%;
     top: 50%;
     margin-top: -50px;
     margin-left: -100px;
     text-align: center;
     border:solid 1px black;
     border-right: solid 3px black;
     border-bottom:solid 3px black;
}

 

A propos de l'auteur

 

Développeur depuis plus de 10 ans, j'ai commencé la programmation dès l'âge de 9 ans sur un PC 8088 !!

GW-Basic, Pascal, Turbo Pascal, Delphi ont fait mes bases... Puis Java , bien plus tard... Pour enfin avoir découvert le C#... Quel plaisir de développer avec ce langage des solutions ASP.NET... Le développement Web comme jamais je ne pouvais l'imaginer possible :)

Aujourd'hui titulaire du MCSD VS 6.0, MCAD .NET, et MCT ...

Sur ce blog, je souhaite partager des choses simples mais efficaces... Des problèmes de tous les jours que l'on peut rencontrer et qu'il est simple de régler :)

Mes certifications

Month List