使用JS访问ViewBag属性

时间:2013-10-31 09:45:47

标签: jquery asp.net-mvc razor

我正在为视图包分配一个列表,如下所示:

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>
...

1 个答案:

答案 0 :(得分:1)

这不能完成,因为@(ViewBag.MyArray["honka"]["ponka"])表达式在服务器上进行评估,然后在发送到客户端并执行javascript之前由值替换。

问题是服务器在呈现页面之前需要知道这些变量。

解决方法1

通过url的查询字符串将这些变量传递给服务器。

razor语法示例

// url : ../?var1=honka&var2=ponka
$(document).ready(function () {
  var output = 'Info: @(ViewBag.MyArray[Request["var1"]][Request["var2"])';
  alert(output);
}

解决方法2

将整个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);
}