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】:

WeatherControllerUpdate API 预计将接收 theWeathercityId 参数。预期接收数据如下:


  "theWeather": 
    "onHeader": `<boolean value>`,
    "onProfile": `<boolean value>`
  ,
  "cityId": `<numeric value>`

当您提交Update 的表单时,您正在向 API 发送数据,如下所示:


  "city": 
    "onHeader": `<boolean value>`,
    "onProfile": `<boolean value>`
  ,
  "cityId": `<numeric value>`

因此,theWeather.onHeadertheWeather.onProfile 将获得默认的 boolean 值 (false),因为 theWeather 值未从前端接收。


解决方案

解决方案 1:为用于模型绑定的 &lt;input&gt; 元素应用 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:将UpdatetheWeather参数重命名为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 按钮单击表格行总是返回第一行(模式)

ASP NET Core Minimal API 总是返回 200 而不是指定的 204

每当我发送包含 Bearer 令牌的请求时,ASP.Net Core API 总是返回 401 未授权