2010-04-22 4 views
1

У меня возникла проблема с передачей массива javascript на контроллер. У меня есть несколько флажков на моем представлении, когда установлен флажок, его идентификатор будет сохранен в массиве, а затем мне нужно будет использовать этот массив в контроллере. Вот код:ASP.NET MVC - массив Javascript всегда передавался контроллеру как null

ВИД:

<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> 

Когда «Отправить» кнопка нажата, я хочу, чтобы передать selectedSearchUsers к действию «ComposeMessage». Вот код действия:

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

Однако значения List всегда равны нулю. Любая идея почему?

спасибо.

+0

Похож на этот вопрос http://stackoverflow.com/questions/2527658/jquery-sortable-toarray-with-asp-net-mvc-actionresult – R0MANARMY

+0

Я пробовал это решение, но все еще получаю null при передаче массива в мой контроллер. Кто угодно? Благодарю. –

ответ

2

Вы можете попробовать изменить метод действия контроллера к этому:

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

Я считаю, что вы должны принимать данные в формате JSON в виде строки и выполнить преобразование вручную. Надеюсь, поможет. Приветствия.

+0

Спасибо, Джей, я изменил параметр, чтобы не использовать Array. –