如何在 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
中。
我已经用一系列问题填充了 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
中。