模型绑定在局部视图中不起作用

时间:2014-07-07 02:17:42

标签: asp.net-mvc model-binding partial

我目前遇到的问题是,在我的部分视图中,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.ElementAt(i)替换Model.Cases_Category2 [i]时,绑定无法正常工作。这是什么原因,它可能与原始问题有关吗?感谢。

1 个答案:

答案 0 :(得分:1)

我猜问题是局部视图中name的{​​{1}}。因此,您将部分视图模型传递给部分页面,复选框的名称将在您传递到部分页面的模型上生成。

因此,将父视图中的复选框的生成名称与部分视图中的复选框名称进行比较,如果它们不相同,请将部分页面内的复选框名称更改为父页面内的名称复选框。