如何在 ASPX 视图中使用 Javascript 循环访问 ViewData

How to loop through ViewData with Javascript in ASPX View

我已经用一系列问题填充了 ViewData 项,以便我可以将 json 数据存储在本地存储中:

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

在测试过程中,我将 ViewData 加载到 localstorage 中(硬编码)以获得确切的问题数量:

            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.

在视图中,我正在尝试使用 javascript:

ViewData 动态加载到浏览器 localstorage
<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>

现在这给了我一个错误,它找不到 i,因为我们 "escaped" 客户端代码。所以我将其更改为:

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

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

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

         };

这是我卡住的部分。我一直在这条线上收到这些错误:

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

Error 7 Invalid expression term ';'

Error 8 ; expected

当我 运行 Web 应用程序时,这就是我在检查元素上得到的全部内容:

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

有没有办法将 <%%> 标签转义到 javascript 中,以便 javascript 变量在 ViewData 中使用?或者其他方法?

更新: 我继续玩代码,这是我最接近我需要做的事情:

$(function () {

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

            <%}%>

         });

所以这确实循环了我的问题并将值放在我需要的地方,但我遇到的最后一个问题是现在必须将 javascript 放在引号中:

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

需要最后一个引号来关闭 <%%> 标记之间的字符串。但是这个引号给我错误:

Invalid or unexpected token

因为我的 javascript 存储 localstorage 现在看起来像这样:

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

任何协助或帮助将不胜感激。

我终于解决了这个问题。引号的问题是我是 "stringifying" 一个字符串,当我从代码中删除单引号时:

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

json 对象已成功存储在浏览器的 localstorage 中。