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) + "®ion=" + 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 ();