首页 > 解决方案 > 如何将 Javascript 数组获取到 MVC 控制器

问题描述

我正在构建一个 asp.net 应用程序,用户可以在其中订购食物,并且我还有一个管理页面,管理员可以在其中登录并为特定周制作菜单。我已经解决了“菜单制造商”中的所有问题,当我按下“保存”按钮时,菜单中的每个值都会进入一个 javascript 数组。

那么问题来了。当我按下保存按钮时,我想将数组序列化为 json,然后能够将其传递给我的 mvc 控制器。

我正在尝试使用 ajax 来做到这一点。这是保存按钮单击的完整代码:

$("#CreateMenuBtn").on('click', function () {
FullMenu.push(
    {
        "Year": $("#YearInput").val(),
        "Week": $("#WeekInput").val(),
        "Products": MenuArray
    }
);
var dataToPost = JSON.stringify({ methodParam: FullMenu });

$.ajax({
    type: "POST",
    url: '@Url.Action("Index", "Home")',
    contentType: "application/json; charset=utf-8",
    dataType: 'JSON',
    data: dataToPost,
    traditional: true
});
console.log(FullMenu);
});

当我现在调试并检查它的值data是否完全正确且采用 JSON 格式时:

methodParam
 [0]
   Year: "2019"
   Week: "4"
   Products:
   [0]
      WeekDay: "Måndag"
      Food: "kött"
      Price: "54kr"
      Cabinet: "C"
   [1]
      Weekday: "Onsdag"
      Food: "Köttbullar"
      Price: "80kr"
      Cabinet: "B"

现在我想要它到我的 mvc 控制器。

我有一个名为的类MenuProduct它看起来像这样:

public class Menu
{
    public int ID { get; set; }

    public string Year { get; set; }

    public string Week { get; set; }

    public virtual List<Product> Products { get; set; }

}



public class Product
{
    public int ID { get; set; }

    public string Description { get; set; }

    public int Price { get; set; }

    public char Cabinet { get; set; }

    public int MenuID { get; set; }

    public int Day { get; set; }
}

这是我在控制器中提出的:

    public IActionResult Index(List<Menu> methodParam)
    {
       foreach(Menu item in methodParam)
        {
            string des = item.Week + item.Year;
        }
        return View();
    }

但是当我在 foreach 循环内的操作中调试时,methodParam得到值 0。

所以我想要帮助的是如何将数组放入 c# 中。我希望能解释我的情况,不胜感激。

提前致谢!

标签: javascriptc#jqueryajaxasp.net-mvc

解决方案


尝试这个,

 var FullMenu = [];
        var Menu1 = {};
        Menu1['Year'] = "2016",
            Menu1['Week'] = "Jan";
        FullMenu.push(Menu1);
        var Menu2 = {};
        Menu2['Year'] = "2017",
            Menu2['Week'] = "Feb";
        FullMenu.push(Menu2);
        var dataToPost = FullMenu;
        $.ajax({
            url: '@Url.Action("Index", "Home")',
            type: 'POST',
            data: {
                methodParam: dataToPost
            },

推荐阅读