无法将部分视图中的复选框绑定到主模型(MVC)

时间:2018-06-20 08:02:20

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

我一直在寻找问题,一直在寻找答案,但是没有帮助。

我有一个模特:

public class Filters
{
    public bool Filter1 { get; set; }
    public bool Filter2 { get; set; }
    public bool Filter3 { get; set; }
    etc...
}

我有一个带有多个复选框的局部视图,并尝试了多种操作:

<input id="Filter1" name="Filter1" type="checkbox" value="true">
<input type="hidden" value="false" name="Filter1" />

@Html.CheckBoxFor(model => model.Filter1)

然后我有一个主要模型:

public class Dashboard
{
    ...
    public Filters FiltersDashboard { get; set; }
}

然后在主视图中的某处插入这样的局部视图:

@Html.EditorFor(model => model.FiltersDashboard, "Filters")

在一个jquery中,单击该复选框并显示该复选框的值时,我会执行警报。该值保持不变。

<script>
    $("#Filter1").click(function () {
        alert(" @Model.FiltersDashboard.Filter1 ")
    });
</script>

编辑:也在.submit函数中尝试过,但是模型值保持不变:

<script>
    $("#searchform").submit(function (event) {
        alert(" @Model.FiltersDashboard.Filter1 ")
        event.preventDefault();
    });
</script>

这告诉我某些东西没有正确绑定,但是我不知道我在做什么错。

此外,我之所以不使用复选框列表,是因为我需要对每个过滤器执行不同的查询,因此需要特定的名称和绑定。

1 个答案:

答案 0 :(得分:1)

@Model.FiltersDashboard.Filter1是剃刀代码,在发送到视图之前在服务器上执行,因此它只会返回该属性的初始值(如果您检查源代码,则将看到该初始值已在您的脚本中进行了硬编码)。

但是,如果脚本正在执行,则意味着您在第二个代码段中使用了手动<input>标签,在这种情况下,您的视图未绑定到模型,因为正确的{{1 }}属性为name,关联的name="FiltersDashboard.Filter1"属性为id

始终使用强类型id="FiltersDashboard_Filter1",它将为两路模型绑定和客户端验证生成正确的html。

还要注意,它只需要为@Html.CheckBoxFor()-不需要第二个参数。

然后脚本应该是

@Html.EditorFor(model => model.FiltersDashboard)