0

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

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

我尝试通过反斜杠引号进行转义,直接使用它和其他一些变体,但显然我没有得到正确的语法,因为我得到了诸如variable notrecognized in scopemissing close parantesis 之类的错误。

编辑

<td>
  @(ViewBag.MyArray[a][b])
</td>

编辑

我还在CS 和 CSHTML 文件的顶部添加了using关键字。

@{
  Layout = null;
}
@using TestService.ServiceReference;
@using System.Web.Helpers;
<!DOCTYPE html>
<html>
...
4

1 回答 1

1

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

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

解决方法 1

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

剃刀语法示例

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

解决方法 2

将整个 ViewBag.MyArray 作为 Json 分配给 JavasCript 变量。

剃刀语法示例

$(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);
}
于 2013-10-31T09:55:29.243 回答