ASP.NET CheckBox 总是返回 false 值
Posted
技术标签:
【中文标题】ASP.NET CheckBox 总是返回 false 值【英文标题】:ASP.NET CheckBox returns always false value 【发布时间】:2021-11-23 22:51:12 【问题描述】:有谁知道为什么我在更新表单时总是得到一个错误的值?我尝试使用 (value="false") 进入复选框,但仍然无法正常工作。任何帮助表示赞赏!
<form asp-controller="Weather" asp-action="Update" method="POST">
<tr>
<td>@city.City</td>
<td><input type="number" name="cityId" value="@city.Id" hidden/></td>
<td><input type="checkbox" asp-for="@city.OnHeader" /></td>
<td><input type="checkbox" asp-for="@city.OnProfile" /></td>
<td><a asp-controller="Weather" asp-action="Delete" asp-route-cityId="@city.Id"><i class="fas fa-trash-alt color"></i></a></td>
<td><button type="submit"><i class="fas fa-edit color"></i></button></td>
</tr>
</form>
[HttpPost]
public IActionResult Update(WeatherModel theWeather, int cityId)
_weatherService.Update(cityId, theWeather.OnHeader, theWeather.OnProfile);
return RedirectToAction("Settings");
【问题讨论】:
【参考方案1】:WeatherController
的 Update
API 预计将接收 theWeather
和 cityId
参数。预期接收数据如下:
"theWeather":
"onHeader": `<boolean value>`,
"onProfile": `<boolean value>`
,
"cityId": `<numeric value>`
当您提交Update
的表单时,您正在向 API 发送数据,如下所示:
"city":
"onHeader": `<boolean value>`,
"onProfile": `<boolean value>`
,
"cityId": `<numeric value>`
因此,theWeather.onHeader
和 theWeather.onProfile
将获得默认的 boolean
值 (false
),因为 theWeather
值未从前端接收。
解决方案
解决方案 1:为用于模型绑定的 <input>
元素应用 name
属性
theWeather
对象的数据提交给 API。
<td><input type="checkbox" name="theWeather.OnHeader" asp-for="@city.OnHeader" /></td>
<td><input type="checkbox" name="theWeather.OnProfile" asp-for="@city.OnProfile" /></td>
解决方案2:将Update
theWeather
参数重命名为city
city
参数与html 表单匹配。
public IActionResult Update(WeatherModel city, int cityId)
_weatherService.Update(cityId, city.OnHeader, city.OnProfile);
return RedirectToAction("Settings");
解决方案 3:使用[Bind(Prefix = "city")]
属性
city
而不是 theWeather
。
public IActionResult Update(([Bind(Prefix = "city")] WeatherModel theWeather, int cityId)
参考文献
Custom Prefix - Model binding in ASP.NET Core
How to use Bind Prefix?
【讨论】:
以上是关于ASP.NET CheckBox 总是返回 false 值的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net Core 3 API 总是返回 401- JwtBearer
ASP.NET Core Identity 3.1:UserManager.RemoveFromRoleAsync 总是返回 UserNotInRole
IFormFile 在 asp.net core 2.1 中总是返回 null
ASP.NET MVC 按钮单击表格行总是返回第一行(模式)