您正在视图内填充模型? 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"/>
这是不太可能是你想要实现的。
嘿达林。非常感谢您的回复。然而,即时通讯运行您的代码时出现以下错误:在序列化类型为“System.Reflection.RuntimeModule”的对象时检测到循环引用。它发生在这一行:var model = @ Html.Raw(Json.Encode(Model)); – PabloB
这是因为你有循环引用。您不能使用循环引用序列化对象图。我建议你使用视图模型,而不是将你的领域模型传递给视图,并打破这个循环引用。 –