所以我试图通过我的模型传递数据(int-Array)...
namespace MvcApplication2.Models {
public class Sudoku {
public int[] numbers { get; set; }
}
}
...,由控制器使用索引初始化...
namespace MvcApplication2.Controllers
{
public class SudokuController : Controller
{
//
// GET: /Sudoku/
[HttpGet]
public ActionResult Index()
{
Sudoku sudoku = new Sudoku();
int[] numbers = new int[81];
for (var i = 0; i < 81; i++) {
numbers[i] = i;
}
sudoku.numbers = numbers;
return View(sudoku);
}
}
}
...通过视图...
@model MvcApplication2.Models.Sudoku
@{
ViewBag.Title = "Sudoku";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Sudoku</h1>
<div class="sudoku"></div>
@section scripts {
<script id="script1" src="~/Scripts/render_sudoku.js" type="text/javascript" data-numbers=@Model.numbers></script>
}
...放入我的JavaScript文件中,我只想将其用作数组。
但是,当我尝试
console.log($('#script1').data("numbers"));
,
我只能得到
System.Int32[]
作为答案,似乎是一个仅描述格式的字符串。
是否可以在JavaScript文件中使用实际的数组?
我是MVC的新手,无法完全掌握它。
答案 0 :(得分:2)
问题:@ Model.numbers是int对象的列表,因此它显示您无法像这样访问的字符串值,因为它将转换为对象字符串。
解决方案:上面的答案是正确的,但是如果您想像下面这样访问数组的直接JavaScript变量, 您可以将int字符串数组设置为java-script变量,如下所示。
<script>
var sudokuNumbers = [@string.Join(",", Model.numbers)]
</script>
不需要在JavaScript中将字符串拆分为数组。
现在您可以访问sudokuNumbers
,此变量是javascript数组。
您可以访问其价值。
希望对您有帮助。
答案 1 :(得分:1)
我建议您将数字列表作为变量传递给脚本部分,而不要将其设置为其中的标签的数据属性。然后,您可以在脚本中使用该变量。
您认为:
@section scripts {
<script>
var mynumbers = "@string.Join(",", Model.numbers)";
</script>
<script id="script1" src="~/Scripts/render_sudoku.js" type="text/javascript"></script>
}
在您的脚本中:
var numbers = mynumbers.split(",");
for (var i in numbers)
{
var number = numbers[i];
// DO WHATEVER
}
编辑:您需要将Javascript变量的声明放在引号中,否则会出现ESLint解析错误。
答案 2 :(得分:0)
做到这一点的最佳方法IMO是通过Framework中的序列化程序进行的,该序列化程序可以处理几乎所有内容,而不仅仅是数组。这样,您就不必担心格式的详细信息,转义序列,特殊情况等。
在视图中:
@using System.Web.Script.Serialization
@{
var serializer = new JavaScriptSerializer();
}
<script>
var numbers = @Html.Raw(serializer.Serialize(Model.numbers));
</script>