2012-09-06 8 views
0

i ont le script sur ASPX:variables Javascript not found

<dx:ASPxButton ID="ASPxButton_PrintLetrVoit" runat="server" Text="Impression lettre de voiture(décalage)" AutoPostBack="False"> 
     <ClientSideEvents Click="function (s, e) { e.processOnServer = false; for (var i = 0; i < Tourne.length; i++) {window.open('PrintLettreVoit.aspx?TourneId='+Tourne[i]);}}" /> 
</dx:ASPxButton> 

et cs:

public List<string> Tourne; 

protected void Page_Load(object sender, EventArgs e) 
{ 
     try 
     { 
      foreach (var oItem in oOrdre_BL.GetAllLettrVoit_Tourne()) 
      { 
      Page.ClientScript.RegisterArrayDeclaration("Tourne", "'"+oItem+"'"); 
      } 
     ...... 

malheureusement j'ai obtenu erreur javascript: i eu erreur:

Horodatage : 06/09/2012 11:23:03 
Erreur : ReferenceError: Tourne is not defined 
Fichier Source : http://xxxxxxx/Code/BackEnd/FaExped_BackEnd_WebSite/Ordre.aspx 
Ligne : 5146 

une idée?

Merci vous à l'avance

PS: quand je vois le code source qui a généré:

<script type="text/javascript"> 
//<![CDATA[ 
var Tourne = new Array(''); 
//]]> 
</script> 


<script type="text/javascript"> 
//<![CDATA[ 

WebForm_InitCallback();//]]> 
</script> 
</form> 


</body> 
</html> 

j'ai modifié mon code:

<dx:ASPxButton ID="ASPxButton_PrintLetrVoit" runat="server" Text="Impression lettre de voiture(décalage)" AutoPostBack="False"> 
          <ClientSideEvents Click="function (s, e) { 
          if(typeof(Tourne) !== 'undefined' && Tourne != null) 
          { 
          e.processOnServer = false; 

          for (var i = 0; i < Tourne.length; i++) {window.open('PrintLettreVoit.aspx?TourneId='+Tourne[i]);} 
          } 
          else 
          {alert ('Tous est coches');} 

          }" /> 
         </dx:ASPxButton> 

mais encore, ce n'est pas un bonne solution, parce que je ne sais pas pourquoi Tourne est indéfini?

+0

Je chose que vous vient de déclarer 'Liste publique Tourne,' mais vous devez donner une définition avant d'utiliser cela.(Je ne suis pas un développeur .net) –

+0

Juste une idée pour un meilleur style de codage: N'insérez pas une fonction Javascript complète dans un eventhandler. Réduit à l'appel de méthode. – reporter

Répondre

0

Il pourrait être que vous avez quelques guillemets simples dans les données. La raison de ce problème est la suivante:

Lorsque vous appelez "Page.ClientScript.RegisterArrayDeclaration", il ajoute cet élément à une déclaration de tableau JavaScript au bas de la page.

Ainsi, les éléments suivants:

Page.ClientScript.RegisterArrayDeclaration("Tourne", "'a'"); 
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'b'"); 
Page.ClientScript.RegisterArrayDeclaration("Tourne", "'c'"); 

viderait le code JavaScript suivant sur la page:

<script type="text/javascript"> 
//<![CDATA[ 
var Tourne = new Array('a', 'b', 'c'); 
//]]> 
</script> 

S'il y a des guillemets simples dans les données qui sont retournés par « oOrdre_BL.GetAllLettrVoit_Tourne () ", alors il insérerait ceux-ci. Donc, si j'ai ajouté un quatrième élément de « brok'en » (invalide parce qu'elle a obtenu un guillemet simple supplémentaire):

Page.ClientScript.RegisterArrayDeclaration("Tourne", "'brok'en'"); 

Ensuite, il rendrait le JavaScript invalide suivant:

<script type="text/javascript"> 
//<![CDATA[ 
var Tourne = new Array('a', 'b', 'c', 'brok'en'); 
//]]> 
</script> 

Si cela se produit, "Tourne" ne sera jamais correctement défini car le JavaScript n'est pas valide. En tant que tel, vous devriez "nettoyer" vos données avant d'essayer de les mettre dans le tableau. Ce qui suit devrait travailler à « échapper » la seule citation:

Page.ClientScript.RegisterArrayDeclaration("Tourne", "'" + oItem.Replace("'", "\\'") + "'"); 

Bien sûr, cela est basé sur l'hypothèse de mauvaises données. Si cela ne fonctionne pas, la meilleure chose à faire est de "voir la source" dans votre navigateur lorsque vous regardez la page. Jetez un oeil au bas du balisage où "Tourne" est défini en JavaScript, et postez-le ici - il devrait aider à comprendre ce qui se passe.

+0

Merci, mais ce n'est pas à cause du 'ou' – user609511

+0

Dans ce cas, s'il vous plaît pouvez-vous suivre la suggestion dans le dernier paragraphe de ma réponse afin que nous puissions enquêter plus loin? – tristankoffee

0

J'ai rencontré le même problème et j'ai trouvé que ma page se trouvait dans un panneau de mise à jour qui était à l'origine du problème. Je devais désactiver la propriété rendu partielle du gestionnaire de script comme ci-dessous:

<telerik:RadScriptManager ID="radScriptManager1" runat="server" EnablePartialRendering="false"/>