【问题标题】:How to make CheckBoxFor only POST data back when value is true当值为真时,如何使 CheckBoxFor 仅返回 POST 数据
【发布时间】:2011-06-08 04:09:24
【问题描述】:

我有一个模型,它有一个布尔属性和一些其他属性,这些属性具有 DataAnnotations 必需属性。

在我看来我有

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

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

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

【问题讨论】:

  • 您可以使用具有您想要的行为的 html 复选框。 Htm.CheckBoxFor 呈现隐藏字段以发布未选中的值

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


【解决方案1】:

只需使用输入标签即可。 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

【讨论】:

  • 谢谢。即使@Html.Checkbox 也不起作用,所以我不得不使用它的实际 HTML 实现
  • 欢迎。我在尝试做复选框列表时自己遇到了这个问题,并且浪费了很多时间。如果对 MVC 有疑问,请返回裸机并查看问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 2016-09-17
相关资源
最近更新 更多