2011-06-07 35 views
0

我有一個模型具有布爾屬性和其他一些具有DataAnnotations Required屬性的屬性。如何使CheckBoxFor只有POST數據返回值爲true

在我看來,我有

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

但是,如果未選中該複選框的值是假的,這被回傳到控制器MyProduct.BloodTestEnabled是假的實例,但是,因爲它有MyProduct的一個實例,ModelState.IsValid等於false,因爲正在捕獲Required屬性。

如果複選框爲真,我只希望它通過模型綁定器創建的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

你可以使用html複選框,它具有您想要的行爲。 Htm.CheckBoxFor呈現隱藏字段發佈未經檢查的值 – 2011-06-07 20:01:02

回答

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

+0

謝謝。即使@ Html.Checkbox不工作,所以我不得不使用它的實際HTML實現 – Jon 2011-06-07 20:21:31

+0

歡迎。當嘗試執行復選框列表時,我自己遇到了這個問題,並浪費了很多時間。如果對MVC有疑問,請回到裸機並查看問題所在。 – 2011-06-07 20:41:29

相關問題