ASP.NET MVC:Action Method并自动绑定到值数组

时间:2011-01-18 11:35:10

标签: javascript asp.net asp.net-mvc

我有一个javascript发布到一个动作方法,并带有一些数据。 这些数据的格式如下:

pageID  1
photos[1]   2
photos[2]   1

我的行动方法如下:

public ActionResult PosImage(IEnumerable<int> photos, int pageID)

当然,pageID在表单数据中出现,但照片始终为空。

ASP.MVC可以像这样绑定吗?

处理帖子的JS看起来如下:

var ids = { 'photos': {}, 'pageID': SitePhotos.site_id };
    $('#stone-photo-sortable li').each(function (i) {
        i++;
        var id = $(this).attr('rel');
        ids.photos[id] = i;
    });
    $.ajax({
        type: "POST",
        url: '/backend/site/posimage/?timestamp=' + new Date().getTime(),
        dataType: 'json',
        data: ids,
        beforeSend: function () { },
        complete: function () { },
        success: function (html) {
            if (html.worked == 1) {
                Notify.add('success', 'New Positions saved to the database..');
            } else {
                Notify.add('failure', 'Couldn\'t save positions.');
            }

        }
    });

3 个答案:

答案 0 :(得分:1)

我还没有通过javascript完成它,但你的帖子数据应该是这样的:

photos: 1
photos: 2
photos: 3

您可能需要使用不同的$ .ajax重载,以便传递具有重复键名的帖子数据。

编辑似乎您要做的就是将traditional标志设置为true。

答案 1 :(得分:1)

在我看来,如果你将照片对象转过来并将它变成一个数组,这对你来说会更好:

var ids = { 'photos': [], 'pageID': SitePhotos.site_id };
    $('#stone-photo-sortable li').each(function (i) {
        ids.photos[i] = $(this).attr('rel');
    });

答案 2 :(得分:0)

塞尔吉奥,这可以很容易修复。

IEnumerable<int> photos可以使用,但您的数组应始终以0开头!不在1

0开始,MVC会将其解析为IEnumerable

在此处详细了解:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx