0

我有一个这样的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 的新手。

对不起我的英语不好。

4

1 回答 1

2

我有一个这样的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) {
        ....
    }
});
于 2012-06-30T08:06:05.117 回答