Kishan Gupta Ответов: 3

Как мне создать массив в MVC контроллер действий по jQuery в формате JSON


Всем Привет,

У меня есть некоторые переменные в программе javascript. Эти переменные следующие :

var name = "Kishan";
var marks = 76;
var subjects = new Array();
subjects[0] = new Array("S1","S2", "S3");
subjects[1] = new Array("S4","S5", "S6");


У меня есть класс моделей на языке Си#

public class Student
{
   public string Name {get; set;}
   public double Marks {get; set;}
   public List<string[]> Subjects {get; set;}
}


У меня есть метод действия в классе контроллера MVC 4

[HttpPost]
public ActionResult(Student model)
{
  return View();
}

Я написал код в jquery для публикации данных из представления в действие

var source = {
                'Name': name,
                'Marks': marks,
                'Subjects': subjects
            }

            $.ajax({
                type: "POST",
                dataType: "json",
                url: "/Admin/Create",
                data: source,
                success: function (data) {
                    alert("Record added successfully.");
                },
                error: function (error) {
                    jsonValue = jQuery.parseJSON(error.responseText);
                    alert("Error : " + jsonValue);
                }
            });



Теперь проблема заключается в том, что я могу видеть данные в переменных name и marks, но массив (субъекты) показывает null.

Я должен передать этот массив контроллеру.

Пожалуйста помочь.

Спасибо заранее :)

3 Ответов

Рейтинг:
2

Murali Vijay

var name = "Kishan";
var marks = 76;
var employees = [
{ "firstName":"John" , "lastName":"Doe" }, 
{ "firstName":"Anna" , "lastName":"Smith" }, 
{ "firstName":"Peter" , "lastName": "Jones" }



  var data1= [{ "fname": "Danny", "lname": "LaRusso", "phones":employees}];
            $.ajax({
        url:'@Url.Action("test", "controller")',
            data: JSON.stringify(data1),
            type: 'POST',
            contentType: 'application/json;',
            dataType: 'json',
            success: function (result) {
                //  alert(result.ItemList[0].Str);
            }
        });



In model 
public class Person
    {
        public string fname{ get; set; }
        public string lname{ get; set; }
        public List<phone> phones { get; set; }
    }

    public class Phone
    {
        public string firstName { get; set; }
        public string lastName { get; set; }
    }

and then controller

 public ActionResult test(List<person> person)
        {
           
            //return Json(data,JsonRequestBehavior.AllowGet);
            return View(person);
        }

it should work fine.
tell if it is not work</person></phone>


Member 11420653

Привет мистер Мурали Виджай
В "решении 2" я думаю, что мы хотим передать человеку, у которого есть телефонная коллекция, контроллер.

публичный тест ActionResult(List<person> person)

Но зачем вы даете список лиц? Я не могу понять.
И С Помощью Этого Решения Я Могу Показать Свой Элемент Коллекции, Который Я Передаю Контроллеру Через Json, В Таблице? Я имею в виду, что читаю модель человека и сажусь за стол для отображения моих недавно добавленных телефонов?
Спасибо.

Рейтинг:
2

mostafaToloo

var name = "Kishan";
var marks = 76;
var subjects = [{"13456"} , {"789465"}}

  var data= { "Name": name , "Marks": marks , "Subjects":subjects};
  $.ajax({
        url: "/Student/SaveStudent",
        data: JSON.stringify(data),
        type: 'POST',
        contentType: 'application/json;',
        dataType: 'json',
        success: function (result) {
           console.log(result);
         }
        });
// ViewModel
public class Student
{
   public string Name {get; set;}
   public double Marks {get; set;}
   public List<string[]> Subjects {get; set;}
}
// Student Controler
[HttpPost]
 public ActionResult SaveStudent(Student student)
{           
   return Json(student),JsonRequestBehavior.AllowGet);
}


Рейтинг:
1

Murali Vijay

Вам нужно установить traditional:true в настройках ajax

подобный этому
$.Аякс({
//Материал...
традиционный:правда
});


Kishan Gupta

Спасибо за ответ. но это не работает, это делает все данные нулевыми.

Murali Vijay

$.Аякс({
//Материал...
традиционный:правда,
сведения: в формате JSON.преобразовать в строки({ данных: значения }


});

В контроллерах

публичный тест ActionResult(List<string> data)
{

//return Json(data,JsonRequestBehavior.AllowGet);
возвратный вид(данные);
}

попробовать это

Murali Vijay

Кроме того, не забудьте stringify свой json перед отправкой.