2

我的 HTML 代码中有以下行:

<input type="hidden" value="@Model.BgtArray" id="BudgetArray"/>

在这里,BgtArray 是一个二维数组,它被填充到视图本身中。像这样的东西:

@for(i=0;i<10;i++)
{@for (j=0;j<10;j++)
   @Model.BgtArray[i][j]= *some value*;
}

如何在 jQuery 函数中访问此数组的元素?

4

2 回答 2

3

您正在视图中填充模型????在 MVC 模式中,视图旨在显示以模型形式传递给它们的数据。填充此模型是控制器的责任。

话虽这么说,让我们假设您有一个模型:

public class MyViewModel
{
    public int[][] BgtArray { get; set; }
}

它填充在控制器操作中并传递给视图:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            BgtArray = Enumerable
                .Range(1, 10)
                .Select(
                    i => Enumerable
                            .Range(1, 10)
                            .Select(j => i * j)
                            .ToArray()
                )
                .ToArray()
        };
        return View(model);
    }
}

然后我们可以有一个相应的强类型视图,我们可以在其中 JSON 序列化模型并在 javascript 中访问它:

@model MyViewModel
<script type="text/javascript">
    var model = @Html.Raw(Json.Encode(Model));
    alert(model.BgtArray[1][2]);
</script>

它将像这样在浏览器中呈现:

<script type="text/javascript">
    var model = {"BgtArray":[[1,2,3],[2,4,6],[3,6,9]]};
    alert(model.BgtArray[1][2]);
</script>

就以下行而言:

<input type="hidden" value="@Model.BgtArray" id="BudgetArray"/>

它非常没用,因为您无法将整个复杂的对象图存储到隐藏字段中。渲染的结果将是:

<input type="hidden" value="System.Int32[][]" id="BudgetArray"/>

这不太可能是您想要实现的目标。

于 2012-06-12T06:19:18.553 回答
1

为了解决循环引用的问题(在原始问题的答案下面的评论中提到),我使用了这个而不是Json.Encode

@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))

在您的类中,使用以下注释使 Json 忽略导致问题的导航属性:

[JsonIgnore]
public virtual Item Item { get; set; }

解决方案取自:使用@Json.Encode 时隐藏模型中的字段

于 2015-03-12T16:16:49.660 回答