我创建了一个带有复选框的模型活页夹列表,该复选框应该处理我的表单但是当我发布到控制器时,它总是将复选框设置为false,即使在客户端检查了任何帮助吗?
我的模特
library(dplyr)
df1 %>%
group_by(Date, DayOfWeek) %>%
summarise(N = n_distinct(Url)) %>%
group_by(DayOfWeek) %>%
summarise(N = mean(N))
# DayOfWeek N
# <chr> <dbl>
#1 Friday 3.000000
#2 Saturday 3.000000
#3 Sunday 1.000000
#4 Thursday 3.333333
#5 Wednesday 1.000000
客户端代码
public class RoleCheckbox
{
public int id { get; set; }
public bool ischecked { get; set; }
public string name { get; set; }
}
public class UsersNew
{
public IList<RoleCheckbox> Roles { get; set; }
[Required,MaxLength(128)]
public string username { get; set; }
[Required,DataType(DataType.Password)]
public string password { get; set; }
[Required,MaxLength(256),DataType(DataType.EmailAddress)]
public string email { get; set; }
}
我的方法
<div class="panel panel-default">
<div class="panel-heading">Roles</div>
<div class="panel-body">
<ul class="list-group">
@for (var i = 0; i < Model.Roles.Count; i++)
{
<li class="list-group-item">
@Html.Hidden("Roles[" +i +"].id",Model.Roles[i].id)
<label for="Roles_@(i)_ischecked">
@Html.CheckBox("Roles[" +i+ "].id",Model.Roles[i].ischecked)
@Model.Roles[i].name
</label>
</li>
}
</ul>
</div>
</div>
答案 0 :(得分:2)
@Html.CheckBox()
和首选@Html.CheckBoxFor()
方法用于绑定bool
属性。它们生成一个值为true的复选框输入和一个值为false的隐藏输入。您尝试将其绑定到属性id
,而true
或false
的值无法绑定到int
。在任何情况下,您已经拥有属性id
的隐藏输入,因此忽略该复选框的值(DefaultModelBinder
仅读取与属性名称匹配的第一个表单值。)
ischecked
的值始终为false
,因为您永远不会为其提交任何值,因此它只是默认值
始终使用stronlgly类型***For()
方法,并将复选框绑定到bool
属性。你的观点应该是
<ul class="list-group">
@for (var i = 0; i < Model.Roles.Count; i++)
{
<li class="list-group-item">
@Html.HiddenFor(m => m.Roles[i].id)
@Html.CheckBoxFor(m => m.Roles[i].ischecked)
@Html.LabelFor(m => m.Roles[i].ischecked, Model[i].name)
</li>
}
</ul>
请注意,除非您还包含name
@Html.HiddenFor(m => m.Roles[i].name)
媒体资源
在POST方法中,您可以使用
获取所选角色的IDIEnumerable<int> selected = model.Roles.Where(x => x.ischecked).Select(x => x.id);
答案 1 :(得分:-1)
我有同样的问题。对我有用的是摘下value =“ xxx”标签。然后它正常运行。 (很奇怪,我知道。)