Sep 03

Au lieu d'avoir les pages d'erreurs par défaut, souvent désagréable à voir par le client, asp.net permet en quelques cliques de personnaliser ces pages.

1) Décommenter la section "customErrors" dans le web.config

et y modifier le nom des fichiers, on peut y placer aussi bien des pages html que des pages aspx.

<customErrors mode="On" defaultRedirect="GenericErrorPage.aspx">

<error statusCode="403" redirect="403.aspx" />

<error statusCode="404" redirect="404.aspx" />

</customErrors>

L'attribut "mode" peut prendre 3 valeurs :

On : La gestion des erreurs est activée en local et à distance.

Off : Gestion d'erreurs désactivée.

RemoteOnly : Gestion des erreurs activée seulement à distance, en local se seront les pages par défaut.

2) Créer les pages

Ensuite il faut créer ces pages, soit de façon très simple en mettant une image et le nom de l'erreur ou alors en affichant un message dynamique (voir 3)

3) Personnaliser ses pages d'erreurs

a) Créer une classe "BasePage" qui va hériter de "System.Web.UI.Page"

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Configuration;

 

/// <summary>

/// Description résumée de BasePage

/// </summary>

public class BasePage : System.Web.UI.Page

{

      public BasePage()

{

}

 

protected override void OnError(EventArgs e)

{

Exception ex = Server.GetLastError();

Session["LastError"] = ex.Message;

Response.Redirect("~/GenericErrorPage.aspx");

}

}

b) Faire hériter les pages utilisant cette gestion d'erreur par "BasePage" et non plus par "System.Web.UI.Page"

 

c) Commenter ou supprimer le corps de la méthode Application_Error dans le Global.asax

 

d) Modifier la page d'erreur générique :

 

protected void Page_Load(object sender, EventArgs e)

{

if (Session["LastError"] != null)

{

lblMessage.Text = Session["LastError"].ToString();

}

}

 

e) Voici à quoi peut ressembler votre page désormais :

 

 

f) Type de message

Le message peut-être plus ou moins développé en fonction du type de visiteurs (Si c'est un site grand public, on évitera de décrire l'erreur avec toute la stackTrace par exemple!)

Tags:
Sep 03

"L'URL-rewriting est une réécriture d'URL. La technique consistant à réécrire sous forme plus simple des URLs complexes. Cette technique est transparente pour l'internaute ainsi que pour les moteurs de recherches. Le but principal est d'obtenir un meilleur référencement."  cf kdj-webdesign.com

Le but de ce tutoriel est de transformer de façon transparente pour l'utilisateur ce genre d'url : 

Au lieu d'avoir ce type d'adresse : http://www.lesite.com/product.aspx?id=1&name?leNomDeMonProduit

on préférera la transformer en :  http://www.lesite.com/leNomDeMonProduit.html


1) Ajouter la DLL nécessaire dans le répertoire Bin de votre site web

ThunderMain.URLRewriter.dll (4,50 kb) ou sur le site du projet "code source" : http://www.codeproject.com/aspnet/URLRewriter.asp

Clique droit sur le site, puis ajouter une référence pointant sur cette DLL.

2) Ajouter ou modifier le fichier Global.asax

Y ajouter cette méthode : 

void Application_BeginRequest(object sender, EventArgs e)

{

ThunderMain.URLRewriter.Rewriter.Process();

}

 

3) Modifier le fichier Web.config

a) Ajouter dans la section "configuration" :

 

<sectionGroup name="system.web">

<section name="urlrewrites"  

type="ThunderMain.URLRewriter.Rewriter,&#xA; ThunderMain.URLRewriter, Version=1.0.783.30976,&#xA; Culture=neutral, PublicKeyToken=7a95f6f4820c8dc3"/>

</sectionGroup>

b) Ajouter dans la section "System.Web" :

<urlrewrites>

<rule>

<url>product_1.html</url>

            <rewrite>product.aspx?id=1</rewrite>

      </rule>

      <rule>

            <url>product_2.html</url>

            <rewrite>article.aspx?id=2</rewrite>

      </rule>

</urlrewrites>

On peut ajouter autant de balises "rule" que l'on désire. On peut également utiliser des patterns comme <url>product_(.*).html</url> etc...

 

Si cette technique ne marche pas, il se peut que votre serveur web n'interprète pas les pages html comme des pages dynamiques. Il faudra donc modifier la configuration de celui-ci.

 

Jul 19
  • Dans le popup (.ascx.cs)

- Définition de l'événement :(A placer entre les "using" et le nom de la classe)

public delegate void MyEventFormationHandler();

- Déclaration de l'événement :

public event MyEventTotoHandler MyEventToto;

- Déclencher l'événement :

if (MyEventToto != null)

{

MyEventToto();

}

  • Dans la page (aspx.cs)

- Dans la méthode OnLoad :

LePopup.MyEventToto += new MyEventTotoHandler(popupToto_MyEventToto);

- Ajouter la méthode déclenchée lors de l'événement :

void popupFormationAssociee_MyEventFormation()

{

…………………

…………………

}

 

Jul 03
  • Redimensionner une image

Redimensionner une image qui gardera ses proportions avec une hauteur de 100px :

private void redim(string path, string imgName, string pathToSave)

{

Bitmap origine = new Bitmap(path);

int x = origine.Size.Width ;

int y = origine.Size.Height;

int nY = 100;

int nX = (x * nY) / y;

Bitmap aRedim = new Bitmap(origine, new Size(nX,nY));

aRedim.Save(pathToSave + imgName);

}

 

Jul 02
  • Créer un cookie

HttpCookie cookie = new HttpCookie("UserSettings");

cookie["Color"] = "Red";

cookie.Expires = DateTime.Now.AddDays(2);

Response.Cookies.Add(cookie);

Ou

      Request.Cookies["Colors"]["TextColor"] = "Red";

  • Lire un cookie

if (Request.Cookies["Colors"][" TextColor"] != null)

{

string color = Request.Cookies["Colors"]["TextColor"];

}

  • Créer une variable de session

Session["color"] = Color.Red;

  • Lire une variable de session

string sess = Session["color"].ToString();

sess sera égale a «  Red » 

  • Récupérer une QueryString depuis l'URL du navigateur

Request.QueryString["name"].ToString();

 

Tags:
Jul 02

label.Text = Resources.NomDuFichier.NomDeLaRessource;

 

Tags:
Jul 02

Text="<%$ Resources : « Nom du fichier », « Nom de la ressource » %>"

 

Tags:
Jul 02

using System.Globalization;

 

CultureInfo ci = new CultureInfo(Request.UserLanguages[0]);

string langue = ci.ToString();

 

[0] -> ordre de préférence du client

 

Jul 02
  • Supprimer un répertoire et son contenu

protected void deleteFolder(string folder, string name)

{

    DirectoryInfo di = new DirectoryInfo(Server.MapPath(folder + "/" + name));

    FileInfo[] fi = di.GetFiles();

       foreach (FileInfo fi2 in fi)

          {

             fi2.Delete();

          }

    di.Delete(true);

  • Créer un sous répertoire

protected void makeFolder(string folder, string name)

{

     DirectoryInfo di = new DirectoryInfo(Server.MapPath(folder));

     di.CreateSubdirectory(name);

}

  • Déplacer un fichier

protected void moveFile(string from, string name, string to)

{

      FileInfo fi = new FileInfo(Server.MapPath(from) + "/" + name);

      fi.CopyTo(Server.MapPath(FolderPath + "/" + to + "/" + name), true);

}

 

  • Uploader un fichier

  • Page ASPX

<form id="form1" runat="server" method="post" enctype="multipart/form-data">

<input type="file" id="File1" name="File1" runat="server" />                           

<input type="submit" id="Submit1" value="Upload" runat="server" name="Submit1" />

</form>

 

  • Code Behind

private void upload(string folder)

 {

    if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))

     {

      string fn = Path.GetFileName(File1.PostedFile.FileName);

      string saveLocation = Server.MapPath(folder) + "\\" + fn;

 

        try

         {

           File1.PostedFile.SaveAs(saveLocation);

lblErreur.ForeColor = Color.Green;

lblErreur.Text = "The file has been uploaded.";

         }

catch (DirectoryNotFoundException dnfe)

{

lblErreur.ForeColor = Color.Red;

lblErreur.Text = "Directory not found, ";

}

catch (Exception ex)

{

lblErreur.ForeColor = Color.Red;

lblErreur.Text = "Error : " + ex.Message;

}

}

else

{

lblErreur.ForeColor = Color.Red;

lblErreur.Text = "Please select a file to upload";

}

}

Jul 02

protected void makeMenu()

    {

        DataSet ds = GetDataSetForMenu();

 

        foreach (DataRow parentItem in ds.Tables["Categories"].Rows)

        {

            MenuItem categoryItem = new MenuItem((string)parentItem["CategoryName"]);

            menuAsp.Items.Add(categoryItem);

 

            foreach (DataRow childItem in parentItem.GetChildRows("Children"))

            {

                MenuItem childrenItem = new MenuItem((string)childItem["ProductName"]);

                categoryItem.ChildItems.Add(childrenItem);

            }

        }

    }

 

 

    private DataSet GetDataSetForMenu()

    {

        string connec = La ConnectionString;

 

        SqlConnection myConnection = new SqlConnection(connec);

        SqlDataAdapter adCat = new SqlDataAdapter("SELECT * FROM Categories", myConnection);

        SqlDataAdapter adProd = new SqlDataAdapter("SELECT * FROM Products", myConnection);

 

        DataSet ds = new DataSet();

        adCat.Fill(ds, "Categories");

        adProd.Fill(ds, "Products");

 

        ds.Relations.Add("Children", ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["Products"].Columns["CategoryID"]);

        return ds;

 

    }