2012-08-16 81 views
9

我將WebAPI合併到我的開發中,並將所有表單提交發布到WebAPI控制器。我注意到複選框沒有正確綁定到模型。我有一個表單使用:ASP.Net MVC 4的WebAPI不能正確地綁定複選框?

@Html.CheckBoxFor(m => m.HasVideo) 

它產生一個複選框和一個隱藏的表單元素。當我檢查複選框(意思是「真」值)時,我的WebAPI Post中的模型綁定反映了HasVideo屬性的錯誤。我將整個方法移到了傳統的mvc控制器上,並且綁定按預期工作。

有沒有這方面的解決方法,或者是否有我失蹤的東西?

+0

看到這個職位,解決了清除視圖數據。也許這是同樣的問題。 http://stackoverflow.com/questions/11993424/asp-net-mvc3-checkboxform-m-go-is-unchecked-even-though-my-model-go-is-t – 2012-08-16 23:00:28

+4

鏈接SO帖子中的問題是OP不知道如何綁定輸入控件的html助手。當使用Html助手進行輸入控件時,他們有一個訂單,如果模型在錯誤發回到視圖後,助手將始終呈現原始發佈的數據,而不是模型可能包含的任何數據。這是故意保留提交失敗時的輸入。這就是清除模型狀態解決問題的原因。但是,這個問題聽起來不像在正常控制器中的綁定是正常的,但不是在WebAPI控制器中。 – Nope 2012-08-16 23:51:28

+0

服務器上的Request.Form中的複選框的值是否正確? – 2012-08-17 05:02:06

回答

7

不使用的HTML幫助:

@Html.CheckBoxFor(m => m.HasVideo) 

試試這個:

<input id="HasVideo" name="HasVideo" type="checkbox" value="true" @(((Model!=null) && Model.HasVideo) ? "checked=\"checked\"" : "") /> 
+3

這有效......但是爲什麼?!? – 2014-02-10 12:34:31

+0

我有類似的問題,當我檢查時,它是 - 值=「真」 - 屬性的bcos,它被張貼到控制器。如果您刪除了value屬性,它總是會在控制器操作中顯示爲false。 – 2015-05-14 08:04:10

0

以前看過這個問題,它通常是ViewData/ViewBag干擾,這是一般的調試噩夢。

你可以在給你一個問題的函數中添加一個ViewBag.Clear/ViewData.Clear。

乾杯, Ĵ