0

这是我的 jquery 函数。我想将此对象发布到控制器。除了ListOfCBToDisplay之外,一切都很好,它是一个列表。

<script>
function Submit_Movie() {
    //
    var title = $('[id*="Title"]').val();
    var yearOfMaking = $('[id*="YearOfMaking"]').val();
    var description = $('[id*="Description"]').val();

    var movie =
    {
        "Title": title,
        "YearOfMaking": yearOfMaking,
        "Description": description,

        "ListOfCBToDisplay" : []
    };

    //
    var $cbx = $('[id*="cbx"]');        
    $cbx.each(function () {
        var id = GetID($(this).attr('id'));
        var ck = $(this).prop("checked");
        alert(id + ", " + ck);       //The alert is displaying correctly all the values

        var new_obj = { "ID": id, "Value": ck, "Text": "" };
        movie.ListOfCBToDisplay.push(new_obj);
    })

    //
    var url = "@Url.Action("AddEditMovie", "Admin")";
    $.post(url, movie, function (data) {
        location.reload();
    });
}
function GetID(elt_id) {
    var _id = elt_id.split('_');
    if (_id.length == 2) {
        return _id[1];
    }
    else {
        return 0;
    }
}

这是电影课

public class Movie
{
    public Movie()
    {
        ListOfCBToDisplay = new List<CheckBoxToDisplay>();
    }

    // more properties ...

    public List<CheckBoxToDisplay> ListOfCBToDisplay { get; set; }
}

这就是行动

    [HttpPost]
    public ActionResult AddEditMovie(Movie movie)
    {
        //More here ...
    }

为什么所有原始属性都在获取它们的值而列表中的对象具有空值,即 ID = 0、Text = null 和 Value = false ?但是,对象的数量总是正确的,只有值是空的。

感谢您的帮助

4

1 回答 1

1

您可以尝试对JSON.stringify(myObject);对象使用 JSON。或者你可以简单地用 JSjoin方法序列化你的字符串:

var myList = [];
$cbx.each(function () {
    var id = GetID($(this).attr('id'));
    var ck = $(this).prop("checked");
    alert(id + ", " + ck);       //The alert is displaying correctly all the values

    var new_obj = id+"~"+ck; // here `~` is id/value separator
    myList.push(new_obj);
})
movie.ListOfCBToDisplay = myList.join("^"); // here '^' is a separator

然后在您的服务器端,只需使用分隔符拆分字符串^以获取 id/值列表,然后将它们中的每一个拆分为~. 这基本上是手动序列化对象。

编辑

另一种方法是将所有需要的值复制<input type='hidden'>到隐藏<form>然后在表单上使用 JQuery serialize()。也许您可以使用当前表单来执行此操作。

于 2013-07-30T04:17:30.497 回答