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 ;-)