如何使CheckBoxFor仅在值为true时返回POST数据

本文关键字:true 返回 POST 数据 何使 CheckBoxFor | 更新日期: 2023-09-27 17:58:40

我有一个模型,它有一个布尔属性和一些其他具有DataAnnotations Required属性的属性。

在我看来我有

@Html.CheckBoxFor(model => model.MyProduct.BloodTestEnabled, new { @class = "cb" })

但是,如果未选中该复选框,则该值为false,并且这将在MyProduct.BloodTestEnabled的实例为false的情况下返回到控制器,但因为它具有MyProduct的实例,所以ModelState.IsValid等于false,因为捕获了Required属性。

如果复选框为true,我只希望它与modelbinder创建的MyProduct的新实例一起发布回控制器。

我所做的是修复它,但不确定它是否正确:

public class MyViewModel
{
        public MyProdct MyProduct
        {
            get;
            set;
        }
        public bool BloodTestEnabled { get; set; }
}
public ActionResult Add(ProductViewModel newProducts)
        {
            if (!ModelState.IsValid)
            {
                return View("HomeIndex", newProducts);
            }
            //Some other code here
                newProducts.MyProduct.BloodTestEnabled = newProducts.BloodTestEnabled;
                _basket.AddProduct(newProducts.MyProduct);
}

如何使CheckBoxFor仅在值为true时返回POST数据

只需使用输入标记即可。CheckBoxFor方法创建一个隐藏的输入,该输入返回True/False值。CheckBoxFor也不适用于列表或非布尔值。

复选框用于这样的渲染:

     <input checked="checked" id="BloodTestEnabled" 
    name="BloodTestEnabled" type="checkbox" value="true" />
<input name="BloodTestEnabled" 
    type="hidden" value="false" />

你的代码应该是这样的:

<input type="checkbox" name="BloodTestEnabled" class="cb" />

你可以在这里测试你的输入并微调HTML

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_checkbox