根据Darin对我的问题Ho to display multiple checkbox selection based on user's selection from dropdown?的回答 我根据下拉选择显示多个复选框。
现在,一旦用户发布我在页面上的表单(有多个输入),我就会使用FormCollection收集所有数据。我遇到的问题是如何从formcollection中提取所选的复选框值?复选框的数量将根据下拉菜单的不同选择而改变,因此我认为请求每个复选框值都不起作用。
任何人都可以帮我解决这个问题。
流程如下所示:
模型中的属性
public class Subcategory
{
public string Name { get; set; }
public int ID { get; set; }
public bool Flag { get; set; }
}
在实际视图中显示PartialView,其中包含其他表单输入:
<div id="checkboxlist">
@if (Model.SubCategories != null)
{
@Html.Partial("SubCategories", Model.SubCategories)
}
</div>
PartialView SubCategories.cshtml
@model IEnumerable<MyProject.Entities.Subcategory>
@{
// we change the HTML field prefix so that input elements
// such as checkboxes have correct names in order to be able
// to POST the values back
ViewData.TemplateInfo.HtmlFieldPrefix = "checkboxlist";
}
<span>subcategory</span>
<div id="subcategories" style="margin-left: 130px;margin-top: -20px;" data-role="fieldcontain">
<fieldset data-role="controlgroup">
@Html.EditorForModel()
</fieldset>
</div>
EditorTemplates Subcategory.cshtml
@model MyProject.Entities.Subcategory
<div class="editor-label">
@Html.CheckBoxFor(c => c.Flag, new { type = "checkbox" })
<label for="@Model.ID">@Model.Name</label>
@Html.HiddenFor(c => c.Flag)
@Html.HiddenFor(c => c.ID)
@Html.HiddenFor(c => c.Name)
</div>
jquery根据下拉选择显示复选框:
$('#Category').change(function () {
var subcategoriesUrl = $(this).data('subcategoriesurl');
var categoryId = $(this).val();
$('#checkboxlist').load(subcategoriesUrl, { category: categoryId });
});
答案 0 :(得分:1)
请勿使用FormCollection
。这是弱打字的。使用视图模型。像这样:
[HttpPost]
public ActionResult Foo(MyViewModel model)
{
// model.BusinessSubCategories should contain a list of Subcategory
// where for each element you could use the Flag property to see if
// it was selected or not
...
}
另请注意,您在部分字段中使用的字段前缀之间存在不一致:
ViewData.TemplateInfo.HtmlFieldPrefix = "checkboxlist";
和视图模型集合属性:Model.BusinessSubCategories
。因此,如果您希望默认模型绑定器能够在回发时填充此属性,请确保修复前缀以使用正确的属性名称。