Поймать массив JSON в действие контроллера MVC3

89
13

У меня есть массив javascript, например:

var optionArray = new Array();
optionArray["totalBankAmount"] = $("#totalBankAmountID").val();
optionArray["singlePlayerAmount"] = $("#singlePlayerAmountID").val();
..... (more array data)

Я отправляю этот массив таким образом в StartOption (контроллер MVC3):

$.ajax({
url: "/StartOption/Index/",
data: { allOptions: JSON.stringify(optionArray) },
cache: false,
type: "POST",
timeout: 10000,
dataType: "json",
success: function (result) {
....
}
});

Как Index Action поймает этот optionArray? как я получаю эти данные с помощью имени индекса массива в действие моего индекса?

Пожалуйста, дайте мне хороший пример, я новичок в MVC3.

и извините за мой плохой английский.

спросил(а) 2021-01-25T19:20:08+03:00 4 месяца, 3 недели назад
1
Решение
77

У меня есть массив javascript, например:

Нет, у вас нет массива. Массивы в javascript должны иметь нулевые целые индексы. У вас есть объект javascript.

Таким образом, существует 2 сценария:

    Вы хотите работать с объектами Вы хотите работать с массивами

Сначала рассмотрим сценарий объектов. Таким образом, у вас есть объект:

public class Foo
{
public string Bar { get; set; }
public string Baz { get; set; }
}

и затем вы хотите передать его в действие контроллера:

[HttpPost]
public ActionResult Index(Foo foo)
{
...
}

вот как выглядит код вызова:

var foo = {};
foo['bar'] = 'some bar';
foo['baz'] = 'some baz';

// or the equivalent:
// var foo = {};
// foo.bar = 'some bar';
// foo.baz = 'some baz';

// or the equivalent:
// var foo = { bar: 'some bar', baz: 'some baz' };

$.ajax({
url: '@Url.Action("index", "startoption")',
contentType: 'application/json',
data: JSON.stringify({ foo: foo }),
type: 'POST',
timeout: 10000,
success: function (result) {
....
}
});

И второй случай, с массивами:

[HttpPost]
public ActionResult Index(Foo[] foos)
{
...
}

и вызывающий код:

var foos = [];

var foo1 = {};
foo1['bar'] = 'some bar 1';
foo1['baz'] = 'some baz 1';
foos.push(foo1);

var foo2 = {};
foo2['bar'] = 'some bar 2';
foo2['baz'] = 'some baz 2';
foos.push(foo2);

// or the equivalent:
// var foos = [ { bar: 'some bar 1', baz: 'some baz 1' },
// { bar: 'some bar 2', baz: 'some baz 2' } ];

$.ajax({
url: '@Url.Action("index", "startoption")',
contentType: 'application/json',
data: JSON.stringify({ foos: foos }),
type: 'POST',
timeout: 10000,
success: function (result) {
....
}
});

ответил(а) 2021-01-25T19:20:08+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема