我的 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 函数中访问此数组的元素?
我的 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 函数中访问此数组的元素?
您正在视图中填充模型????在 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"/>
这不太可能是您想要实现的目标。
为了解决循环引用的问题(在原始问题的答案下面的评论中提到),我使用了这个而不是Json.Encode
:
@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))
在您的类中,使用以下注释使 Json 忽略导致问题的导航属性:
[JsonIgnore]
public virtual Item Item { get; set; }
解决方案取自:使用@Json.Encode 时隐藏模型中的字段