EventValidation (Vive le Web 2.0) ...

Je vais vous présenter un sujet intéressant.... J'ai pu discuter ce weekend avec un ex-collègue parisien qui est devenu spécialiste Web 2.0 ... Nous avons remarqué que certaines nouveautés d'asp.net 2.0 ajoutant de la sécurité pouvaient devenir des contraintes avec du développement javascript. Je vais donc vous résumer ce premier point.... D'autres points pourraient venir ;-).

Le premier point, concerne la validation des données envoyées via postback. En effet, il existe une validation des données ... Que faire si on ajoute des données via javascript ? ... Voici quelques éléments de réponse ...
  • Suppression de la validation sur toute la page (également possible sur tout le site dans le web.config)
  • <%@ Page EnableEventValidation="false" ... %>
    
  • Customisation du contrôle (ou nous intégrons la validation via l'attribut SupportsEventValidation). Comme expliqué plus haut, il est possible d'insérer certaines lignes via javascript. C'est ce que nous faisons ici.
    1. Insertion du javascript ajoutant une ligne à la drop down
    2. public partial class _Default : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {
              string script2 = @"var d = document.getElementById('" + ddl2.ClientID + "'); d.options[2] = new Option('Mazda', '3');";
              this.Page.ClientScript.RegisterStartupScript(typeof(_Default), "AjouteLigneViaJs2", script2, true);
          }
      }
      
    3. Surcharge de la dropdown pour ajouter des valeurs qui seront acceptées via PostBack.
    4. [SupportsEventValidation]
      public class DynamicDropDownList : DropDownList
      {
          protected override void Render(System.Web.UI.HtmlTextWriter writer)
          {
              // Obligatoire dans le render !!!
              this.Page.ClientScript.RegisterForEventValidation(this.UniqueID, "3");
              base.Render(writer);
          }
      }
      
    5. Code ASP.NET de l'exemple.
    6. <form id="form1" runat="server">
      <div>
          <cc1:DynamicDropDownList ID="ddl2" runat="server" AutoPostBack="true">
              <asp:ListItem Value="1">Audi</asp:ListItem>
              <asp:ListItem Value="2">Peugeot</asp:ListItem>
          </cc1:DynamicDropDownList>
      </div>
      </form>
      

J'espère avoir pu vous ouvrir quelques pistes pour éviter d'avoir des exceptions suite à votre passage dans l'ère Web 2.0 ;-)

Commentaires

1. Le dimanche, juin 15 2008, 22:45 par Paul Lorena

Salut titi!
Excellent article, simplement pour info, l'option "RegisterStartupScript" pour ajouter JavaScript dans la page ASPX a été disponible à partir du Framework 1.1, maintenant est obsolete, on peut utiliser "ClientScriptManager" msdn.microsoft.com/en-us/...

2. Le mardi, juin 17 2008, 11:25 par Pierre-Emmanuel Dautreppe

Effectivement Paul, mais il s'agit de la méthode Page.RegisterStartupScript qui est obsolète. Ici en passant pas Page.ClientScript.RegisterStartupScript, il passe effectivement par le ClientScriptManager (qui est exposé via la propriété ClientScript)

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet

Page top