【发布时间】:2014-07-08 17:12:30
【问题描述】:
我目前遇到的问题是,在我的部分视图中,MVC 框架没有正确绑定复选框。无论复选框是否被选中,CaseViewModel.IsCaseSelected 属性都将始终为 false。但是,如果我在父视图中对 html 进行硬编码而不是呈现部分视图,则 CaseViewModel.IsCaseSelected 属性将被正确设置为与复选框相对应。
我的代码如下所示。
在我看来,表单看起来像这样:
<div class="form-group">
<div>
<label for="ProfileName">Profile Name:</label>
<input type="text" name="ProfileName"><br>
</div>
@Html.Partial("~/Views/Shared/_CasesSelection.cshtml", Model.Cases_Category1)
<div id="category2-cases">
<p>category-2</p>
<label for="select-all">Select all</label>
<input id="select-all" type="checkbox" onclick="select_all_toggle(this)" />
@for (int i = 0; i < Model.Cases_Category2.Count; i++)
{
@Html.Label(Model.Cases_Category2[i].CasesNumber.ToString())
@Html.CheckBoxFor(model => model.Cases_Category2[i].IsCaseSelected)
}
</div>
<div>
<input type="submit" value="Create" class="btn btn-default" />
</div>
我的局部视图如下所示:
@model List<Models.CaseViewModel>
<div id="some-case">
<p>some-case</p>
<label for="select-all">Select all</label>
<input id="select-all" type="checkbox" onclick="select_all_toggle(this)" />
@for (int i = 0; i < Model.Count; i++)
{
@Html.Label(Model[i].CaseNumber.ToString())
@Html.CheckBoxFor(model => model[i].IsCaseSelected)
}
</div>
它绑定的模型如下所示:
public class TestProfileVM
{
[Required]
[RegularExpression(@"^[a-zA-Z0-9-_]+$")]
public string ProfileName { get; set; }
public List<CaseViewModel> Cases_Category1 { get; set; }
public List<CaseViewModel> Cases_Category2 { get; set; }
}
最后,CaseViewModel 看起来像这样:
public class CaseVM
{
public string CaseType { get; set; }
public int CaseNumber { get; set; }
public bool IsCaseSelected { get; set; }
}
附加信息:
此外,在我的父视图中,当我将 Model.Cases_Category2[i] 替换为 Model.Cases_Category2.ElementAt(i) 时,绑定无法正常工作。这是什么原因,可能与原始问题有关吗?谢谢。
【问题讨论】:
标签: asp.net-mvc model-binding partial