Options ajoutées à <select> par javascript perdu dans le postback

J'ai ajouté quelques options à l'élément select par javascript dans le côté client et je ne peux pas le récupérer dans le postback.

Que devrais-je faire?

Code utilisé pour ajouter des options:

<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList> var ddlProduct = "#"+"<%= ddlProduct.ClientID %>"; $(ddlProduct).append($("<option></option>").html(product_name) 

Les options ajoutées à une liste déroulante à l'aide de JavaScript NE JAMAIS toucher le côté serveur et encore moins être préservées pendant le déploiement. Les options sont stockées dans ViewState. Vous modifiez la liste déroulante à l'aide de DOM du côté client, mais qu'en est-il de ViewState? Vous ne l'modifiez pas, donc ASP.NET ne saura pas qu'une modification a été effectuée dans la liste déroulante, lorsqu'il recharge l'état de la liste déroulante du ViewState.

Solution possible

L'une des façons est d'utiliser des variables cachées pour stocker les valeurs que vous avez ajoutées à la liste déroulante. Lorsque le contrôle se dirige vers le côté du serveur, vous pouvez vérifier la valeur de ce champ caché et ajouter les éléments à la liste déroulante, si nécessaire.

Vous pouvez stocker les éléments dans une chaîne formatée JSON et analyser cette chaîne à l'aide de la classe DataContractJsonSerializer de .NET Framework (si vous utilisez .NET Framework> = 3.5) du côté du serveur. Si vous n'utilisez pas .NET Framework 3.5, vous pouvez utiliser seperators comme – text1,text2|value1,value2

La seule donnée renvoyée au serveur à partir de la balise de select est la valeur de l'élément sélectionné. Les options que vous ajoutez ne sont pas retournées au serveur.

Les contrôles de serveur dans ASP.NET utilisent viewstate pour conserver les objets ListItem qui forment les balises d' option dans la balise de select rendue. Le viewstate envoie généralement un champ caché distinct afin qu'il soit renvoyé au serveur lorsque le formulaire est affiché.

Vous pouvez utiliser une technique similaire pour les options que vous ajoutez, en les mettant également dans un champ caché, que vous pouvez ensuite traiter dans le code du serveur pour créer des objets ListItem pour les éléments à mettre dans le contrôle DropDown .