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" ... %>
- Insertion du javascript ajoutant une ligne à la drop down
- Surcharge de la dropdown pour ajouter des valeurs qui seront acceptées via PostBack.
- Code ASP.NET de l'exemple.
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); } }
[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); } }
<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 ;-)
2 réactions
1 De Paul Lorena - 15/06/2008, 22:45
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 De Pierre-Emmanuel Dautreppe - 17/06/2008, 11:25
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)