如何将复选框的值传递给 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();
我有一个 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
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();