0

我通过 AJAX POST 将 JSON 数据发布为 ::

var length = $('.organizer-media').length;
                var contents = $('.organizer-media');

                var  Title;
                type == "New" ? Title = $('#newName').val() : Title = $('#Playlist option:selected').text();

                var playlistid = $('#Playlist').val()
                type == "New" ? playlistid = 0 : playlistid = $('#Playlist').val()

                var data = [];

                for (var i = 0; i < length; i++) {
                    data[i] = { ID: parseInt(contents[i].id), MetaID: parseInt(contents[i].title) }
                }
               var totaldata={ data: data, playlistid: parseInt(playlistid),Title:Title };    
                $.ajax({
                    type: 'POST',
                    data: JSON.Stringify(totaldata),
                    url: '/Builder/Save',
                    success: function () {
                        alert("Playlist saved successfully!!");
                    }
                })

JSON 数据以以下格式发送:

{"data":[{"ID":779389,"MetaID":774367},{"ID":779390,"MetaID":774367},{"ID":779387,"MetaID":774366},{"ID":779388,"MetaID":774366},{"ID":779386,"MetaID":774365},{"ID":779385,"MetaID":774364},{"ID":779384,"MetaID":774363},{"ID":779383,"MetaID":774362},{"ID":779382,"MetaID":774361},{"ID":779381,"MetaID":774360},{"ID":779378,"MetaID":774359},{"ID":779379,"MetaID":774359},{"ID":779377,"MetaID":774358},{"ID":779376,"MetaID":774357},{"ID":779375,"MetaID":774356},{"ID":779372,"MetaID":774355},{"ID":779373,"MetaID":774355},{"ID":779374,"MetaID":774354},{"ID":779370,"MetaID":774353},{"ID":779394,"MetaID":774370}],"playlistid":1461,"Title":"MX OPEN TALENT MARIA"}:

当我将 ItemViewModel 设置为 ::

public class ItemEditViewModel
    {
        public long ID { get; set; }
        public long MetaID { get; set; }
    }

我的控制器代码如下:

[HttpPost]
        public ActionResult Save(ItemEditViewModel[] data,long playlistid=0, string Title="")
        {



            for (int i = 0; i < data.Length; i++)
            {
                var pc = db.PlaylistContents.FirstOrDefault(x => x.PlaylistContentId == data[i].ID);
                if (pc == null)
                {
                    pc = new PlaylistContent();
                    db.PlaylistContents.Add(pc);
                }
                pc.ContentMetaDataId = data[i].MetaID;
                pc.PlaylistContentSequenceId = i + 1;
            }
db.SaveChanges();

            return Json(new { foo = "bar", baz = "Blech" });
        }

在控制器中执行数据时,它不接受 POSTED 数据作为其 ViewModel 值。

4

1 回答 1

0

我的问题解决了。由于我已将数组与其他两个变量结合使用,因此我只需要对数组进行字符串化,而不是对要发布的整个 ajax 数据进行字符串化。正如您在下面的代码中看到的那样:

 var totaldata =  { data: data, playlistid: parseInt(playlistid), Title: Title };
                $.ajax({
                    type: 'POST',
                    data: { data: JSON.stringify(data), playlistid: parseInt(playlistid), Title: Title, deleted: JSON.stringify(deleted) },
                    traditional:true,
                    url: 'Save',
                    success: function (data) {

                        alert("Playlist saved successfully!!");

                    }
                })

在上面的代码中,我刚刚对数组而不是其他数据进行了字符串化。

感谢您的一些合作。

于 2013-05-07T06:06:53.127 回答