如何查找选中的复选框并将其传递给 MVC 中的操作结果

How to find which checkboxes are selected and pass them to ActionResult in MVC?

本文关键字:结果 操作 MVC 复选框 何查找 查找      更新时间:2023-09-26

我有一个MVC5应用程序,在我的一个视图中,我有这样的东西:

<div id="subcatsform" class="form-group" style="visibility:hidden;">
     @Html.LabelFor(m => m.Subcategories, new { @class = "col-md-3 control-label" })
     <div id="subcats" class="col-md-9">
      </div>
</div>

然后,在我的 JavaScript 部分,我做了这样的事情来填充我的空div

$(function () {
    $("#CategoryID").on("change", function () {
        var selected_option = $("#CategoryID option").filter(":selected").text();
        $("#subcats").empty();
        if (selected_option != "Please select a category") {
            $("#subcatsform").css("visibility", "visible");
            $.ajax({
                url: "/Home/GetSubcategories",
                dataType: "json",
                data: {
                    cid: $("#CategoryID").val(),
                },
                success: function (data) {
                    $.each(data, function (key, value) {
                        var checkbox = '<input type="checkbox" name="subcategory" value="' + value.id + '"> ' + value.value + '<br />';
                        $("#subcats").append(checkbox);
                    }); 
                }
            });
        }
        else
        {
            $("#subcatsform").css("visibility", "hidden");
        }
    });
});

因此,我只需检查先前选择了类别,然后相应地列出在该类别中找到的所有子类别,并为每个子类别创建带有类型复选框的输入。这一切正常,当我更改类别时,我能够获得适当的子类别,并为我创建复选框。

问题是,后来当用户按下视图窗体中的提交按钮时,我不知道如何找出选中了哪些复选框。

我的ActionResult定义如下:

public async Task<ActionResult> RegisterBusiness(BusinessViewModel model)

在我的业务视图模型中,我有一个定义如下的属性:

public virtual ICollection<Subcategory> Subcategories { get; set; }

任何想法,我如何获得所有选中的复选框,并在提交表单时获取其 value 属性?

假设您的子分类类中有一个名为 IsSelected 的布尔属性。您应该能够发送这样的值

 var checkedList = $.map($(':input[name="Subcategory"]'),
   function(){
    var $this = $(this);
    return {
       name :$this.data('subcatagory'), // You can add the subcatagory as a data dash attribute or any other unique identifier in  html of the checkbox before appending
       IsSelected  : $this.is(':checked')
        }});
        $.ajax({
          url : '<your url>',
          type:"POST",
          contentType:"application/json; charset=utf-8",
          data : JSON.Stringify({
                  'Subcategories' :checkedList
                 })
        });