2009-07-07 6 views
-1

J'ai un site web publié sur la plate-forme facebook, j'utilise C# .Net 2008, le problème est que je charge un tableau éléments du code derrière javascript arary et je charge l'élément Elelment en utilisant le code JavaScript suivant:Javascript erreur dans l'obtention du code derrière les valeurs

ArList = new Array('<%=ListOfWords[0]%>','<%=ListOfWords[1]%>','<%=ListOfWords[2]%>','<%=ListOfWords[2]%>'); 

le problème que, lorsque i appelle un élément du tableau comme suit:

document.getElementById("WordDiv").innerHTML = ArList [0]; 

l'élément est réglé pas à la valeur malgré la matrice dans le code a derrière valeurs et je ne sais pas pourquoi la valeur de l'élément de tableau i s n'est pas défini? et dans certains cas, je l'ai trouvé chargé de valeur et tout va bien donc peut-être c'est un problème dans le rendu de sorte que la valeur du code derrière ne soit pas vu du côté client? ou d'où vient le problème? et quand j'ai tracé l'application dans IE j'ai trouvé la barre d'état signaler une erreur javascript puis a disparu et dire fait et quand l'allert jaune apparaît dans la barre d'état je l'ai cliqué et remarqué le message dit: objet attendu. Le problème maintenant est que dans l'événement onload de la balise body j'appelle une fonction dans le javascript qui initialise le tableau javascript avec des valeurs du code derrière le tableau et le problème est que dans certains cas la fonction n'est pas entrée comme tracée en mettant une alerte au début de la fonction et j'ai trouvé que lorsque le tableau javascript n'est pas rempli le code de la fonction n'est pas entré car l'alerte n'est pas affichée donc je ne sais pas comment forcer le DOM à entrer dans cette fonction que je l'appelle dans la balise ici Extrait du code: code javascript:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server">   
    </head> 
    <body onload="IntializeArr(); return false;"> 
    <form id="form1" runat="server" > 
    ..........Some Controls............... 
    </form> 
    <script type="text/javascript" language="javascript"> 
    var TList; 
    var BList; 
     function IntializeArr() 
    {  
     TList = new Array('<%=ListofT[0]%>','<%=ListofT[1]%>','<%=ListofT[2]%>','<%=ListofT[3]%>','<%=ListofT[4]%>','<%=ListofT[5]%>','<%=ListofT[6]%>','<%=ListofT[7]%>','<%=ListofT[8]%>','<%=ListofT[9]%>'); 
     BList = new Array('<%=ListOfB[0]%>','<%=ListOfB[1]%>','<%=ListOfB[2]%>','<%=ListOfB[3]%>','<%=ListOfB[4]%>','<%=ListOfB[5]%>','<%=ListOfB[6]%>','<%=ListOfB[7]%>','<%=ListOfB[8]%>','<%=ListOfB[9]%>');   
    } 
    </script> 
    </body> 
    </html> 

C# code:

public string[] ListOfB = new string[15]; 
public string[] ListofT = new string[15]; 

Et le code derrière tableau est rempli à partir des données retournées de la base de données et ils sont remplis je les ai tracés et chaque fois et ils sont remplis et j'ai trouvé que le problème de javascript je ne sais pas plate-forme ou de mon code mais je pense que ce n'est pas de mon code comme le problème que j'appelle une fonction dans l'onload de la balise et la fonction n'est pas entrée et c'est le problème si quelqu'un peut m'aider s'il vous plaît

J'espère que je vais trouver une solution que je suis déprimé

+0

doublon: http: // stackoverflow.com/questions/1086673/load-javascript-code-après-chargement-code-derrière – Canavar

+0

alors que puis-je attirer l'attention des gens sur le problème que le poste précédent n'a pas eu d'attention et pas de réponse utile et il y a un gros problème dans ce forum que les questions sont montrées selon récemment posté pas aux réponses récentes – Ahmy

+0

Ceci n'est pas un forum, et personne n'est obligé de répondre à vos questions dans les 20 minutes. –

Répondre

1

Vous devez échapper correctement les valeurs:

TList = new Array("<%=Server.HTMLEncode(ListofT[0]%>)", ...); 
+0

Merci beaucoup je suis trop content pour cette réponse qui m'a aidé trop je suis trop reconnaissant à vous et j'ai besoin de vous une illustration de pourquoi votre code a résolu le problème? et pourquoi Server.HTMLEncode faire? J'espère que vous répondrez parce que cela va m'aider à l'avenir dans la compréhension de manythings et merci beaucoup – Ahmy

+0

Supposons par exemple que ListofT [0] = "abc" abc "; Cela signifie que vous allez vous retrouver avec le balisage suivant: TList = new Array ("abc" abc ", ...) qui est un javascript invalide et vous obtenez une erreur. Server.HTMLEncode convertit "en " et donc vous vous retrouvez avec TList = new Array (" abc " abc ", ...) qui est maintenant un javascript valide. –

0

Ne serait-il pas plus facile de générer ce code javascript dans votre code derrière, puis appelez Page.RegisterStartupScript()? Cela vous assure d'avoir un tableau correct et vous pouvez utiliser moins de tags aspx dans votre code javascript.

public string ArrayToJsArray(string[] array) 
{ 
    StringBuilder s = new StringBuilder(); 
    foreach (var item in array) 
    { 
     s.Append("'" + Server.HTMLEncode(item) + "',"); 
    } 
    s.Remove(s.Length-1, 1); 
} 

public void main(){ 
    string script = "<script type=\"text/javascript\">"; 
    script += "var TList = new Array(" + ArrayToJsArray(TListArray) + ");"; 
    script += "var BList = new Array(" + ArrayToJsArray(BListArray) + ");"; 
    script += "</script>"; 
    Page.RegisterClientScriptBlock("key", script); 
} 

Essayez le code ci-dessus, pardonnez-moi comme je l'ai pas courir moi-même donc il peut contenir des bugs, mais l'idée est claire, je pense.

+0

j'ai essayé Page.RegisterArrayDeclaration() et rien de modifié et toujours le tableau pas vu de javascript j'ai pensé à cette solution mais Je ne sais pas quel est le problème car le code tag argent n'est pas vu du code javascript et parfois il fonctionne bien et a obtenu les données et dans d'autres fois une erreur javascript est survenue et ne voit pas les valeurs de tableau – Ahmy

+0

mettre tout le code de script dans la chaîne dans le code derrière et l'enregistrer? Je ne comprends pas comment faire ça? ou vous voulez enregistrer le tableau? du tout j'ai javascript code plus que ce que j'ai écrit dans la poste et pour l'enregistrer donc je vais avoir chaque fonction et variables publiques et le mettre dans le code derrière pour être passé à la fonction qui enregistrer le code javscript? s'il vous plaît clarifier ce que vous voulez dire et merci – Ahmy

+0

J'ai fourni un code qui explique ce que je veux dire. Vous créez le code javascript pour initialiser les tableaux, puis vous les publiez sur la page en utilisant registerclientscriptblock. – Peter

0

Est-ce que .NET n'a pas de problème à rendre les balises aspx dans un bloc <script>?

Les valeurs correctes sont-elles rendues dans le code HTML? Si ce n'est pas le cas, vous devriez essayer de rendre le bloc de script JS entier d'une autre manière.

+0

Que voulez-vous dire par le rendu des tags aspx dans un bloc