私はフォームバインドのリストを作成しましたが、フォームを処理するはずですが、コントローラに投稿するときにチェックボックスをfalseクライアントサイドでチェックされていますか?チェックボックスがチェックされても常にfalseにバインドされています。asp.net mvc 5
私のモデル
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="[email protected](i)_ischecked">
@Html.CheckBox("Roles[" +i+ "].id",Model.Roles[i].ischecked)
@Model.Roles[i].name
</label>
</li>
}
</ul>
</div>
</div>
私の方法
HttpPost,ValidateAntiForgeryToken]
public ActionResult New(UsersNew form)
{
var user = new User();
syncRole(form.Roles, user.Roles);
if (Database.Session.Query<User>().Any(u => u.username == form.username))
ModelState.AddModelError("username", "username must be unique");
if (!ModelState.IsValid)
return View(form);
user.email = form.email;
user.username = form.username;
user.SetPassword(form.password);
Database.Session.Save(user);
return RedirectToAction("index");
}
あなたのモデルとあなたの投稿方法を表示してください。これはチェックボックスを生成する方法ではありません(そしてあなたの 'id'プロパティは本当に' boolean'ですか?) –