ASP MVC 将 Array 对象发送到 JavaScript 函数

ASP MVC send an Array object to a JavaScript function

本文关键字:JavaScript 函数 对象 MVC Array ASP      更新时间:2023-09-26

我在大学课程中使用ASP MVC。但是,在我发送太多AJAX请求之前,我遇到了一个问题,这导致我的页面加载时间太长。因此,我认为我可以通过将数组从数据库发送到视图,然后将它们内联放入我的 jquery 函数来改善这种情况。

所以这是我有我的简单模型的样子:

public class NewBooking
    {
        public IEnumerable<dynamic> parks { get; set; }
    }

然后在我的控制器中,我使用数据库中的信息设置公园,如下所示:

public ActionResult Index()
        {
            var model = new NewBooking();
            var parks = Database.Open("SQLServerConnectionString").Query("SELECT * FROM Park");
            var output = from o in parks
                         select new { parkID = o.parkID, parkName = o.parkName };
            model.parks = output.ToList();
            return View(model);
        }

现在,这将返回我期望的所有信息,如果我简单地在视图中调用模型公园,您可以在下面看到:

@model build_01.Models.Timetabler.NewBooking
@{
    @Model.parks
}

我知道这种方法不会,但是使用 for 循环它工作正常,现在到我的问题;我正在尝试调用一个 JavaScript 函数并将这个数组传递给它。

$(document.ready(function () {
        slotAvailability(@Model.parks);
    }));

我可以对此@Model.parks做些什么来将其发送到函数吗?有点像如果我使用 AJAX 我会怎么做 JSON。

就目前而言,尝试像这样调用它会在我的控制台中给我这个错误:

Uncaught SyntaxError: Unexpected number
我可以看到

为什么,如果我要检查元素,我可以看到函数解析如下所示:

slotAvailability(System.Collections.Generic.List`1[&lt;&gt;f__AnonymousType3`2[System.Object,System.Object]]);

谢谢

您应该使用 Json.Encode 函数。还要确保在document后将括号关闭在正确的位置:

$(document).ready(function () {
    var parks = @Html.Raw(Json.Encode(Model.parks));
    slotAvailability(parks);
});

在这里使用dynamic似乎是一个糟糕的设计。你没有任何智力感知。您宁愿有一个视图模型:

public class ParkViewModel
{
    public int ParkId { get; set; }
    public int ParkName { get; set; }
}

然后是您的NewBooking模型:

public class NewBooking
{
    public IEnumerable<ParkViewModel> Parks { get; set; }
}