views:

133

answers:

1

I'm having some problem with passing a javascript array to the controller. I have several checkboxes on my View, when a checkbox is checked, its ID will be saved to an array and then I need to use that array in the controller. Here are the code:

VIEW:

<script type="text/javascript">
        var selectedSearchUsers = new Array();
        $(document).ready(function () {
            $("#userSearch").click(function () {
                selectedSearchUsers.length = 0;
                ShowLoading();
                $.ajax({
                    type: "POST",
                    url: '/manage/searchusers',
                    dataType: "json",
                    data: $("#userSearchForm").serialize(),
                    success: function (result) { UserSearchSuccess(result); },
                    cache: false,
                    complete: function () { HideLoading(); }
                });
            });
            $(".userSearchOption").live("change", function () {
                var box = $(this);
                var id = box.attr("dataId");

                var checked = box.attr("checked");

                if (checked) {
                    selectedSearchUsers.push(id);
                }
                else {
                    selectedSearchUsers.splice(selectedSearchUsers.indexOf(id), 1);
                }
            });
            $("#Send").click(function () {
                var postUserIDs = { values: selectedSearchUsers };
                ShowLoading();
                $.post("/Manage/ComposeMessage",
                postUserIDs,
               function (data) { }, "json");
            });
    });
</script>

When the "Send" button is clicked, I want to pass the selectedSearchUsers to the "ComposeMessage" action. Here is the Action code:

public JsonResult ComposeMessage(List values) { //int count = selectedSearchUsers.Length; string count = values.Count.ToString(); return Json(count); }

However, the List values is always null. Any idea why?

Thank you very much.

+1  A: 

You might try changing the controller's action method to this:

[HttpPost]
public JsonResult ComposeMessage(string values) 
{
    JavaScriptSerializer jass = new JavaScriptSerializer; 
    AnyClass myobj = jass.Deserialize<AnyClass>((string)values);
    ...
    ... 
}

I believe that you have to take the JSON data in as a string and do the conversion manually. Hope it helps. Cheers.

Jay Shanker
Thanks Jay, I've changed the parameter to not use Array.
Xuan Vu