checkboxfor 总是 return false
checkboxfor always return false
关于绑定 checkboxfor
。
我有一个奇怪的问题
public async Task<IActionResult> Save(TblCoordinators tb)
{
try
{
tb.Modified = DateTime.UtcNow;
_context.TblCoordinators.Update(tb);
await _context.SaveChangesAsync();
_toastNotification.AddSuccessToastMessage("Data has been updated successfully");
return PartialView("_Edit",ModelView);
}
catch(Exception ex)
{
_toastNotification.AddErrorToastMessage("Something went wrong.");
return NoContent();
}
}
在我看来我有
<form asp-action="Save"
data-ajax="true"
data-ajax-method="POST"
data-ajax-mode="replace"
data-ajax-update="#edit"
method="post">
<div class="border">
<div class="row">
<div class="col-12">
<h5 class="heading">Main Details</h5>
</div>
<div class="col-12">
<div class="row p-2">
<div class="col-6">
<div class="form-group">
<label class="control-label">Title</label>
<input asp-for="@Model.infoList[0].title" class="form-control" name="Title" required />
<input type="hidden" asp-for="@Model.infoList[0].coordinatorID" class="form-control" name="coordinatorID" />
<input type="hidden" asp-for="@Model.infoList[0].created" class="form-control" name="created" />
</div>
<div class="form-group">
<label class="control-label">
Contact Name
</label>
<input asp-for="@Model.infoList[0].contactName" class="form-control" name="contactName" />
</div>
<div class="form-group">
<label class="control-label">
Telephone
</label>
<input asp-for="@Model.infoList[0].telephone" class="form-control" name="telephone" />
</div>
<div class="form-group">
<label class="control-label">
Active
</label>
@Html.CheckBoxFor(x=>x.infoList[0].active, new { @class= "form-check-input" })
</div>
<button type="submit" class="btn btn-primary w-50 ">Save</button>
</div>
<div class="col-6">
<div class="form-group">
<label class="control-label">
Address Line 1
</label>
<input asp-for="@Model.infoList[0].addressLine1" class="form-control" name="addressLine1" />
</div>
<div class="form-group">
<label class="control-label">
address Line 2
</label>
<input asp-for="@Model.infoList[0].addressLine2" class="form-control" name="addressLine2" />
</div>
<div class="form-group">
<label class="control-label">
City
</label>
<input asp-for="@Model.infoList[0].addressCity" class="form-control" name="addressCity" />
</div>
<div class="form-group">
<label class="control-label">
County
</label>
<input asp-for="@Model.infoList[0].addressCounty" class="form-control" name="addressCounty" />
</div>
<div class="form-group">
<label class="control-label">
Postcode
</label>
<input asp-for="@Model.infoList[0].addressPostcode" class="form-control" name="addressPostcode" />
</div>
</div>
</div>
</div>
</div>
</div>
</form>
我得到的所有数据都是正确的,除了复选框的 bool 值!!
我之前为 checkBox 做过类似的事情,但在这种情况下,我不知道为什么它不起作用。另外,我试图从中获取它的价值:
<input type="checkbox" name="x" />
在控制器中是这样的:
public async Task<IActionResult> Save(TblCoordinators tb, bool x)
但它仍然总是错误的!!
你试过了吗
<input asp-for="@Model.infoList[0].active" class="form-control" name="active" />
我想你可能误解了复选框。
在type=checkbox name=x
中,如果省略了value属性,则复选框的默认值为on,因此在这种情况下提交的数据将是x=on
,而不是true或false。
您可以在 doc 中看到 checkbox
。
在你的情况下,下面是一个简单的demo.You可以检查它。
型号:
public class info
{
public string contactName { get; set; }
public bool active { get; set; }
}
public class TblCoordinators
{
public List<info> infoList { get; set; }
}
索引视图:
@model TblCoordinators
<form asp-action="Save" method="post">
<div class="form-group">
<label class="control-label">
Contact Name
</label>
<input asp-for="@Model.infoList[0].contactName" class="form-control" />
</div>
<div class="form-group">
<label class="control-label">
Active
</label>
@Html.CheckBoxFor(x => x.infoList[0].active, new { @class = "form-check-input" })
</div>
<input type="submit" value="Save" />
</form>
操作:
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Save(TblCoordinators tb)
{
//....
return View("Index");
}
测试结果:
关于绑定 checkboxfor
。
public async Task<IActionResult> Save(TblCoordinators tb)
{
try
{
tb.Modified = DateTime.UtcNow;
_context.TblCoordinators.Update(tb);
await _context.SaveChangesAsync();
_toastNotification.AddSuccessToastMessage("Data has been updated successfully");
return PartialView("_Edit",ModelView);
}
catch(Exception ex)
{
_toastNotification.AddErrorToastMessage("Something went wrong.");
return NoContent();
}
}
在我看来我有
<form asp-action="Save"
data-ajax="true"
data-ajax-method="POST"
data-ajax-mode="replace"
data-ajax-update="#edit"
method="post">
<div class="border">
<div class="row">
<div class="col-12">
<h5 class="heading">Main Details</h5>
</div>
<div class="col-12">
<div class="row p-2">
<div class="col-6">
<div class="form-group">
<label class="control-label">Title</label>
<input asp-for="@Model.infoList[0].title" class="form-control" name="Title" required />
<input type="hidden" asp-for="@Model.infoList[0].coordinatorID" class="form-control" name="coordinatorID" />
<input type="hidden" asp-for="@Model.infoList[0].created" class="form-control" name="created" />
</div>
<div class="form-group">
<label class="control-label">
Contact Name
</label>
<input asp-for="@Model.infoList[0].contactName" class="form-control" name="contactName" />
</div>
<div class="form-group">
<label class="control-label">
Telephone
</label>
<input asp-for="@Model.infoList[0].telephone" class="form-control" name="telephone" />
</div>
<div class="form-group">
<label class="control-label">
Active
</label>
@Html.CheckBoxFor(x=>x.infoList[0].active, new { @class= "form-check-input" })
</div>
<button type="submit" class="btn btn-primary w-50 ">Save</button>
</div>
<div class="col-6">
<div class="form-group">
<label class="control-label">
Address Line 1
</label>
<input asp-for="@Model.infoList[0].addressLine1" class="form-control" name="addressLine1" />
</div>
<div class="form-group">
<label class="control-label">
address Line 2
</label>
<input asp-for="@Model.infoList[0].addressLine2" class="form-control" name="addressLine2" />
</div>
<div class="form-group">
<label class="control-label">
City
</label>
<input asp-for="@Model.infoList[0].addressCity" class="form-control" name="addressCity" />
</div>
<div class="form-group">
<label class="control-label">
County
</label>
<input asp-for="@Model.infoList[0].addressCounty" class="form-control" name="addressCounty" />
</div>
<div class="form-group">
<label class="control-label">
Postcode
</label>
<input asp-for="@Model.infoList[0].addressPostcode" class="form-control" name="addressPostcode" />
</div>
</div>
</div>
</div>
</div>
</div>
</form>
我得到的所有数据都是正确的,除了复选框的 bool 值!!
我之前为 checkBox 做过类似的事情,但在这种情况下,我不知道为什么它不起作用。另外,我试图从中获取它的价值:
<input type="checkbox" name="x" />
在控制器中是这样的:
public async Task<IActionResult> Save(TblCoordinators tb, bool x)
但它仍然总是错误的!!
你试过了吗
<input asp-for="@Model.infoList[0].active" class="form-control" name="active" />
我想你可能误解了复选框。
在type=checkbox name=x
中,如果省略了value属性,则复选框的默认值为on,因此在这种情况下提交的数据将是x=on
,而不是true或false。
您可以在 doc 中看到 checkbox
。
在你的情况下,下面是一个简单的demo.You可以检查它。
型号:
public class info
{
public string contactName { get; set; }
public bool active { get; set; }
}
public class TblCoordinators
{
public List<info> infoList { get; set; }
}
索引视图:
@model TblCoordinators
<form asp-action="Save" method="post">
<div class="form-group">
<label class="control-label">
Contact Name
</label>
<input asp-for="@Model.infoList[0].contactName" class="form-control" />
</div>
<div class="form-group">
<label class="control-label">
Active
</label>
@Html.CheckBoxFor(x => x.infoList[0].active, new { @class = "form-check-input" })
</div>
<input type="submit" value="Save" />
</form>
操作:
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Save(TblCoordinators tb)
{
//....
return View("Index");
}
测试结果: