我正在为视图包分配一个列表,如下所示:
ViewBag.MyArray = GetSomeIEnumerable();
在客户端上,我呈现页面并可以通过修复字符串访问 onload 中执行的JS中的元素,如下所示:
$(document).ready(function () {
var output = "Info: @(ViewBag.MyArray["honka"]["ponka"])";
alert(output);
}
但是,如果将索引指定为变量,我不清楚如何访问该元素:
$(document).ready(function () {
var honka = "honka";
var ponka = "ponka";
var output = "Info: @(ViewBag.MyArray[???][???])";
alert(output);
}
我已经尝试通过反斜杠引用转义,直接使用它和其他一些变体,但显然我没有得到正确的语法,因为我得到的错误,如变量无法在范围中识别和缺少结束语()。
<td>
@(ViewBag.MyArray[a][b])
</td>
我还在CS和CSHTML文件的顶部添加了使用关键字。
@{
Layout = null;
}
@using TestService.ServiceReference;
@using System.Web.Helpers;
<!DOCTYPE html>
<html>
...
答案 0 :(得分:1)
这不能完成,因为@(ViewBag.MyArray["honka"]["ponka"])
表达式在服务器上进行评估,然后在发送到客户端并执行javascript之前由值替换。
问题是服务器在呈现页面之前需要知道这些变量。
通过url的查询字符串将这些变量传递给服务器。
razor语法示例
// url : ../?var1=honka&var2=ponka
$(document).ready(function () {
var output = 'Info: @(ViewBag.MyArray[Request["var1"]][Request["var2"])';
alert(output);
}
将整个ViewBag.MyArray作为Json分配给JavasCript变量。
razor语法示例
$(document).ready(function () {
var honka = "honka";
var ponka = "ponka";
var myArray = @Html.Raw(Json.Encode(ViewBag.MyArray));
var output = "Info: " + myArray[honka][ponka];
alert(output);
}