首页 > 解决方案 > MVC 将模型数据传递到 JavaScript

问题描述

所以我试图从我的模型中传递数据(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 的新手,不能完全掌握它。

标签: javascriptc#jqueryrazormodel-view-controller

解决方案


问题:@Model.numbers 是 int 对象列表,因此它显示您无法像这样访问的字符串值,因为它转换为对象字符串。

解决方案:上面的答案是正确的,但是如果您想像下面这样以数组形式访问直接 JavaScript 变量,您可以将 int string 数组设置为 java-script 变量,如下所示。

   <script>
        var sudokuNumbers = [@string.Join(",", Model.numbers)]
   </script>

不需要在 JavaScript 中将字符串拆分为数组。

现在你可以访问了sudokuNumbers,这个变量是 javascript 数组。你可以访问它的值。我希望它可以帮助你。


推荐阅读