如何在MVC控制器中访问JavaScript数组?

时间:2013-03-29 14:10:40

标签: javascript asp.net-mvc-3

我在javascript中创建了一个数组。现在我想使用数组控制器。目前我正在使用FormCollection来访问表单中的数据。有没有办法在FormCollection中访问我的javascript数组,或者作为Html.BeginForm()中的参数?

我尝试使用我在论坛上找到的一些示例来做一个JSON帖子但是控制器中的数组为null。你能帮助我找到在控制器中访问我的javascript数组的最佳方法吗?

<script type="text/javascript">

  var $checkboxes = $('input[type="checkbox"]');

  $(document).ready(function () {
      $('#saveBtn').click(function () {
          var checkList = new Array();
          $.each($checkboxes, function () {
              if ($(this).is(':checked')) {

                  checkList.push('checked');
              }
              else
                  checkList.push('unchecked');
          });
          alert(checkList);

      });

  });             
</script>

更新1

        $(document).ready(function () {
            $('#saveBtn').click(function () {
               var options= [];
 $.each($checkboxes, function () {
 if ($(this).is(':checked')) {
  var item={ "UserChoice" : "checked", "OptionID": "YouCanSetIDHere"};
   }
  else
 {
  var item={ "UserChoice" : "unchecked", "OptionID": "YouCanSetIDHere"};
}
 options.push(item);
}
   $.ajax({ type: "POST", url: '@Url.Action("Edit","Attendance")',
            contentType: "application/json",
            data: JSON.stringify(options)
  }).done(function (html) {
           //do something with the response.
         });


        });

        });

1 个答案:

答案 0 :(得分:0)

您可以创建与您的viewmodel类似的项目,并将其推送到您的数组并使用jQuery post发布。在控制器操作中,您可以使用viewmodel的集合来接受它。 MVC模型绑定将负责其余部分。

假设你有一个像这样的ViewModel

public class UserOptionVM
{
  public string OptionID{ set;get;}
  public string UserChoice { set;get;}
}

在Action方法中,您接受此

的集合
[HttpPost]
public ActionResult Save(List<UserOptionVM> model)
{
  // loop through collection and read and save 

}

现在更改您的Js文件以发送与我们的viewmodel匹配的内容。

var options= [];
$.each($checkboxes, function () {
   if ($(this).is(':checked')) {
      var item={ "UserChoice" : "checked", "OptionID": "YouCanSetIDHere"};
   }
   else
   {
      var item={ "UserChoice" : "unchecked", "OptionID": "YouCanSetIDHere"};
   }
   options.push(item);
});

$.ajax({ type: "POST",
         url: "@Url.Action("Save","User")",
         contentType: "application/json",
         data: JSON.stringify(options)
      }).done(function (html) {
               //do something with the response.
             });