Как получить массив Javascript на контроллер MVC - PullRequest
0 голосов
/ 21 января 2019

Я создаю приложение 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.

У меня есть классы с именами Menu и Product, они выглядят так:

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 #. Я надеюсь, что это объясняет мою ситуацию, буду признателен за помощь.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 21 января 2019

прежде всего попытайтесь сделать структуру классов c # такой же, как и у имен объектов json с теми же свойствами, а затем попробуйте

public IActionResult Index(string methodParam)
    {
       List<Menu> menu = new JavaScriptSerializer().Deserialize<Menu>(methodParam);
       foreach(Menu item in menu)
        {
            string des = item.Week + item.Year;
        }
        return View();
    }
0 голосов
/ 24 января 2019

Это решило проблему: D Изменил URL на /Home(Controller name)/Index(Action name)

var dataToPost = JSON.stringify(jsonData);

$.ajax({
    type: "POST",
    url: '/Home/Create',
    contentType: "application/json; charset=utf-8",
    dataType: 'JSON',
    data: dataToPost,
    traditional: true
});

И действие должно было иметь [FromBody] вот так:

[HttpPost]
public IActionResult Create([FromBody] Dictionary<string, object> jsonMenu)
{
    //Code
    return RedirectToAction("Index", "Home");
}

Большое спасибоВы, ребята, которые пытались помочь :)

0 голосов
/ 21 января 2019

Попробуйте,

 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
            },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...