c# - 如何解决从@Html.CheckBoxFor 自动生成的隐藏表单字段
问题描述
每当我在我的 ASP.NET MVC 模型中创建一个布尔属性并尝试使用 @Html.CheckBoxFor 创建一个复选框时,我都会自动生成一个隐藏的表单字段。我知道这是有充分理由的,但是每当我提交表单并使用表单集合获取该值时,它在处于选中状态时会返回 2 个值。它提交这样的值 - “真,假”。现在,当我使用表单集合获取值并执行 bool.Parse() 时,它会引发错误,因为它无法一起解析“真、假”。有什么办法可以摆脱隐藏的表单字段,或者我应该在处理请求时尝试一些东西吗?
在模型中
[Display(Name ="Is Enabled")]
public bool IsEnabled { get; set; }
在控制器中
public ActionResult Request(FormCollection collection)
{
bool valueIsEnabled=bool.Parse(collection["IsEnabled"])
}
在视图中
@Html.CheckBoxFor(m => m.IsEnabled, new {
@class = "custom-input"
})
当我单击选中时
预期结果 - true 实际结果 - true,false
当我不点击检查
预期结果 - false 实际结果 - false
解决方案
好的,我做了一些研究,发现 CheckBox 助手生成了一个与复选框同名的附加隐藏字段(您可以通过浏览生成的源代码看到它):
<input checked="checked" id="Visible" name="Visible" type="checkbox" value="true" />
<input name="Visible" type="hidden" value="false" />
因此,当您提交表单时,这两个值都会发送到控制器操作。这是直接来自 ASP.NET MVC 源代码的注释,解释了这个附加隐藏字段背后的原因:
if (inputType == InputType.CheckBox) {
// Render an additional <input type="hidden".../> for checkboxes. This
// addresses scenarios where unchecked checkboxes are not sent in the request.
// Sending a hidden input makes it possible to know that the checkbox was present
// on the page when the request was submitted.
...
推荐阅读
- c# - Select 中的 Entity Framework Core Count
- python - 傅里叶空间中的滤波器的行为不像它应该的那样
- authentication - 当 Spotify/Discord 没有在本地保存密码时,他们如何自动登录(在第一次登录后)?
- java - 如何在java中处理来自其他类的元素
- c# - IGDB V3 请求
- mysql - 有没有一种方法可以从我的表或数据的列中获取特定集的计数?此处的具体设置是指预定义的条件
- bioinformatics - Snakemake 和 Pandas 语法:从示例表中获取示例特定参数
- javascript - 如何在我的 Javascript 中添加一行以允许使用触控板和上/下箭头导航我的网站?
- python-3.x - cx_Freeze 应用程序立即关闭,没有错误
- cherrypy - 在多核服务器上复制cherrypy进程