2017-08-14 5 views
0

Je peuplé ViewData élément avec un tableau de questions afin que je puisse stocker les données JSON dans le stockage local:Comment faire une boucle par ViewData avec Javascript dans ASPX Voir

string[] jsonQuestions = new string[StudentExam.QuestionCount]; 

      for (int i = 0; i < StudentExam.QuestionCount; i++) 
      { 
       jsonQuestions[i] = new JavaScriptSerializer().Serialize(StudentExam.QuestionsE[i]); 

       ViewData[i.ToString()] = jsonQuestions[i]; 
      } 

Au cours des essais, je chargé le ViewData dans la localstorage comme celui-ci (codé en dur) pour le montant exact des questions:

  localStorage.setItem("obj0", JSON.stringify(<%=ViewData["0"]%>)); 
      localStorage.setItem("obj1", JSON.stringify(<%=ViewData["1"]%>)); 
      localStorage.setItem("obj2", JSON.stringify(<%=ViewData["2"]%>)); 
      localStorage.setItem("obj3", JSON.stringify(<%=ViewData["3"]%>)); 
      //...etc. 

Dans la vue que je suis en train de charger dynamiquement maintenant le ViewData dans le navigateur localstorage comme celui-ci en utilisant javascript :

<script> 

     var mod = "<%=Html.Raw(Model.TotalNumberOfQuestionsForTest.ToString())%>"; 


     for (var i = 0; i < mod; i++) { 

      localStorage.setItem(
       "obj" + i.toString(), 
       JSON.stringify(<%=ViewData[i.toString()]%>)); 

     }; 
    </script> 

Maintenant, cela m'a donné une erreur qu'il ne peut pas trouver i, puisque nous « évadés » le code côté client. Donc je l'ai changé pour:

for (var i = 0; i < mod; i++) { 

      var s = <%=ViewData[%>i.toString()<%]%>; 

      localStorage.setItem(
       "obj" + i.toString(), 
       JSON.stringify(<%=ViewData[%>i.toString()<%]%>)); 

     }; 

C'est la partie où je suis bloqué. Je continue de recevoir ces erreurs sur cette ligne:

JSON.stringify(<%=ViewData[%>i.toString()<%]%>));

Error 7 Invalid expression term ';'

et

Error 8 ; expected

et quand je lance l'application web c'est tout ce que je me inspecter sur l'élément:

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1525: Invalid expression term ')'

Source Error:

Line 278: localStorage.setItem(Line 279:
"obj" + i.toString(), Line 280:
JSON.stringify(<%=ViewData[%>i.toString()<%]%>)); Line 281: Line 282:
};

Y at-il un moyen d'échapper les balises <%%>, dans le javascript à nouveau pour t La variable javascript à utiliser dans ViewData? Ou une autre façon de le faire?

MISE À JOUR: je suis allé et a joué avec le code un peu plus, ce qui est le plus proche, je l'ai appris à ce que je dois arriver en faisant comme ceci:

$(function() { 

      <% for (int i = 0; i < 1; i++){%> 
     <%="localStorage.setItem('obj" + i.ToString() + "',JSON.stringify('"%><%=ViewData[i.ToString()]%>"'))" 

      <%}%> 

     }); 

Donc cela ne boucle à travers mes questions et mettre la valeur là où je devais, mais la dernière question que j'ai est que maintenant d'avoir à mettre le javascript dans les citations:

<%="localStorage.setItem('obj" + i.ToString() + "',JSON.stringify('"%><%=ViewData[i.ToString()]%>"'))" 

la dernière guillemet est nécessaire pour fermer la chaîne entre le <%%> marque s. mais cette guillemet me donne l'erreur:

Invalid or unexpected token

comme mon javascript pour stocker le localstorage ressemble à ceci maintenant:

localStorage.setItem("obj1", JSON.stringify("my json query"))" //this quotation is the problem 

Toute aide ou de l'aide sera grandement appréciée.

Répondre

0

Je résous enfin le problème. Le problème avec la citation était que je « stringifying » une chaîne et le moment où je l'ai enlevé les guillemets simples du code:

$(function() {  
      <% for (int i = 0; i < Model.TotalNumberOfQuestionsForTest; i++){%> 
      <%="localStorage.setItem('obj" + i.ToString() + "',JSON.stringify("%> 
      <%=ViewData[i.ToString()]%> 
      <%="))"%> 
      <%}%> 

L'objet json a été correctement stocké dans le localstorage du navigateur.