当值为true时,如何使CheckBox仅返回POST数据

时间:2011-06-07 19:51:56

标签: c# .net asp.net-mvc http asp.net-mvc-3

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

在我看来,我有

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

但是,如果未选中该复选框,则该值为false,并且将其发送回控制器,并且MyProduct.BloodTestEnabled的实例为false,但由于它具有MyProduct实例,因此ModelState.IsValid等于false,因为Required属性为被抓住了。

如果复选框为true,我只希望它使用由模型绑定器创建的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);
}

1 个答案:

答案 0 :(得分:2)

只需使用输入标签即可。 CheckBoxFor方法创建一个返回值为True / False的隐藏输入。它旨在完全按照您的要求运行。 CheckBoxFor也不适用于列表或非布尔值。

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