2008-12-01 7 views
4

J'utilise une liste html non ordonnée imbriquée en style déroulant. Lorsque l'on clique sur la balise a dans l'élément de la liste des listes internes, elle déclenche un javascript qui est censé définir la valeur d'un champ caché dans le texte du lien sur lequel on a cliqué. Le javascript semble fonctionner - J'ai utilisé une alerte pour lire la valeur du champ caché, mais quand j'essaye de mettre cette valeur dans la chaîne de queues dans mon code asp.net C# derrière - il tire la valeur initiale - pas la valeur du set javascript.Utilisation de javascript pour définir la valeur du champ masqué puis accéder à la valeur du serveur C# code

Je suppose que cela est parce que le javascript est côté serveur non côté client, mais quelqu'un at-il une idée comment je peux obtenir ce travail

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

C# code

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

Répondre

12

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

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

Maintenant, sur le serveur, où vous voulez 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 

Cela devrait le faire.

+0

C'est la meilleure solution, puisque Viewstate est l'élément clé qui provoque le chargement des valeurs –

+0

sans runat = 'server' le Request.Form ["accomodationAnswer"] ne possède pas le key accomodationAnswer. Ai-je manqué quelque chose d'autre? – RagnaRock

5

Essayez ce

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

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

Alongwith cette écriture:

ClientIDMode="Static" 

Il aide à ne pas changer le contrôle côté serveur id lors de l'exécution

maintenant

Régler le v alue en javascript as

document.getElementById ("hiddenField"). value = "Vallue";

Et l'accès dans codebehind comme ci-dessous.

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

Questions connexes