如何将复选框的值传递给 MVC5 中的 ActionResult?

How to pass the values of the checkboxes to ActionResult in MVC5?

我有一个 MVC5 应用程序,在我看来,我有这样的代码:

<div class="form-group">
    @Html.LabelFor(model => model.CategoryID, "Category", htmlAttributes: new { @class = "control-label col-md-3" })
    <div class="col-md-9">
        @Html.DropDownList("CategoryID", null, "Please select a category", htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.CategoryID, "", new { @class = "text-danger" })
    </div>
</div>
<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 代码,它根据先前选择的类别填充子类别。我通过以下代码段实现它:

$(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");
        }
    });
});

关键是,直到一切正常,并且对于每个选定的类别,我都正确地获取了子类别列表并为每个子类别创建了复选框,其中 name 属性如您所见等于 subcategory 并且 value 属性等于子类别的实际 ID。

接下来我想做的是,我想获取选中的复选框(意味着选定的子类别)的 value 属性,并将其传递给我的控制器。我的 ActionResult 定义如下:

public async Task<ActionResult> RegisterBusiness(BusinessViewModel model)

BusinessViewModel 中,我有一个这样的属性:

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

最后,我的 Subcategory 模型定义如下:

public class Subcategory
{
    public int SubcategoryID { get; set; }

    public string SubcategoryName { get; set; }

    public string SubcategoryDescription { get; set; }

    [ForeignKey("Category")]
    [Display(Name = "Category")]
    public int CategoryID { get; set; }

    public virtual Category Category { get; set; }

    [NotMapped]
    public bool IsSelected { get; set; }
}

如果有人可以帮助我将选中的复选框的值传递到我的 RegisterBusiness ActionResult,然后将它们存储在我的 ICollection<Subcategory> Subcategories 属性中,我会很高兴。

更改您的 RegisterBusiness 操作以获取名为 subcategory

的 int 数组
public async Task<ActionResult> RegisterBusiness(BusinessViewModel model, int[] subcategory)

该数组将自动捕获所选复选框的值。

现在,在回发时从 string[] subcategory 创建 ICollection<Subcategory> 并分配给子类别。

using System.Linq;
...
...
ICollection<Subcategory> Subcategories = subcategory.Select(x => new Subcategory { SubcategoryID = x}).ToList();