我有一个模型,它有一个布尔属性和一些具有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);
}
答案 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