En utilisant javascript pour définir la valeur du champ caché, accédez à la valeur à partir du code C # du serveur

J'utilise une liste déroulante html imbriquée sous la forme d'un menu déroulant. Lorsque l'étiquette A dans l'élément de la liste des listes internes est cliquée, elle déclenche un javascript qui est censé définir la valeur d'un champ caché dans le texte pour le lien qui a été cliqué.

Le javascript semble fonctionner – J'ai utilisé une alerte pour lire la valeur du champ caché, mais quand j'essaie de mettre cette valeur dans la chaîne de requête dans mon code asp.net c # derrière – elle tire la valeur initiale – pas la valeur définie javascript .

Je suppose que c'est parce que le javascript est côté client et non sur le côté du serveur, mais a-t-il une idée de comment je peux le faire fonctionner?

HTML

<div class="dropDown accomodation"> <label for="accomodationList">Type of accomodation</label> <ul class="quicklinks" id="accomodationList"> <li><a href="#" title="Quicklinks" id="accomodationSelectList">All types <!--[if IE 7]><!--></a><!--<![endif]--> <!--[if lte IE 6]><table><tr><td><![endif]--> <ul id="sub" onclick="dropDownSelected(event,'accomodation');"> <li><a href="#" id="val=-1$#$All types" >All types</a></li> <li><a href="#" id="val=1$#$Villa" >Villa</a></li> <li><a href="#" id="val=2$#$Studio" >Studio</a></li> <li><a href="#" id="val=3$#$Apartment" >Apartment</a></li> <li><a class="last" href="#" id="val=4$#$Rustic Properties" >Rustic Properties</a></li> </ul> <!--[if lte IE 6]></td></tr></table></a><![endif]--> </li></ul> </div> <input type="hidden" ID="accomodationAnswer" runat="server" /> 

Javascript

  if(isChildOf(document.getElementById(parentList),document.getElementById(targ.id)) == true) { document.getElementById(parentLi).innerHTML = tname; document.getElementById(hiddenFormFieldName).Value = targ.id; alert('selected id is ' + targ.id + ' value in hidden field is ' + document.getElementById(hiddenFormFieldName).Value); } 

Code C #

 String qstr = "accom=" + getValFromLiId(accomodationAnswer.Value) + "&sleeps=" + getValFromLiId(sleepsAnswer.Value) + "&nights=" + getValFromLiId(nightsAnswer.Value) + "&region=" + getValFromLiId(regionAnswer.Value) + "&price=" + Utilities.removeCurrencyFormatting(priceAnswer.Value); 

Je ferais ceci: Tout d'abord, supprimez l'attribut runat='server' du champ caché:

 <input type="hidden" ID="accomodationAnswer" /> 

Maintenant, sur le serveur, où vous souhaitez lire cette valeur, procédez comme suit:

 string accomodationAnswer = Request.Form["accomodationAnswer"]; // now use accomodationAnswer instead of accomodationAnswer.Value // in the C# code that you indicated you are using 

Ça devrait le faire.

Essaye ça

Si vous utilisez .net 4.0 puis dans l'en-tête de la page.

Language = "C #" AutoEventWireup = "true" CodeFile = "Page.cs" Inherits = "Page"

Avec cette écriture:

 ClientIDMode="Static" 

Cela permet de ne pas modifier l'ID de contrôle côté serveur au moment de l'exécution

À présent

Définissez la valeur dans javascript comme

Document.getElementById ("hiddenField"). Value = "Vallue";

Et accédez à codebehind comme ci-dessous.

Chaîne hiddenVallue = hiddenField.Value.ToString ();