C# 如何解析从@Html.CheckBoxFor自动生成的隐藏表单字段

C# 如何解析从@Html.CheckBoxFor自动生成的隐藏表单字段,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,每当我在ASP.NET MVC模型中创建布尔属性并尝试使用@Html.CheckBoxFor创建复选框时,我都会自动生成一个隐藏的表单字段。我知道这是有原因的,但每当我提交表单并使用表单集合获取该值时,当表单处于选中状态时,它将返回2个值。它提交的值如下-‘true,false’。现在,当我使用form collection和do bool.Parse()获取值时,它会抛出一个错误,因为它无法同时解析'true,false'。有没有办法摆脱隐藏的表单字段,或者我应该在处理请求时尝试一些方法 模型

每当我在ASP.NET MVC模型中创建布尔属性并尝试使用@Html.CheckBoxFor创建复选框时,我都会自动生成一个隐藏的表单字段。我知道这是有原因的,但每当我提交表单并使用表单集合获取该值时,当表单处于选中状态时,它将返回2个值。它提交的值如下-‘true,false’。现在,当我使用form collection和do bool.Parse()获取值时,它会抛出一个错误,因为它无法同时解析'true,false'。有没有办法摆脱隐藏的表单字段,或者我应该在处理请求时尝试一些方法

模型中

[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"
})
当我点击Checked时

预期结果-正确 实际结果-真、假

当我不点击checked时

预期结果-错误
实际结果-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.
    ...
if(inputType==inputType.CheckBox){
//为复选框呈现其他属性。此
//解决在请求中未发送未选中复选框的情况。
//发送隐藏的输入可以知道复选框存在
//在提交请求时的页面上。
...

尝试更改该属性的名称,我认为在某些地方会发生冲突。感谢您的回复。问题与名称无关。HTML是为隐藏字段生成的。您尝试过更改它吗?我尝试过:)我面临同样的问题。我为此创建了客户HTML MVC帮助程序。您可以参考此网站:我感谢您的努力。然后k you:)。但是有什么方法可以使用FormCollection吗?请告诉我你是否有解决方法?@Varun我在我的答案中添加了另一种方法,我希望它有帮助。如果它解决了你的问题,请将它标记为答案。不,我想你可以删除这种方法,然后我可以将你的答案标记为最适合这个问题。mo最适合这种方法的方法是模型绑定,它不能正确地用于表单集合。但是现在我可以接受模型绑定的答案。
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.
    ...