假我有這樣一個複選框:選中複選框並提交時Asp.Net MVC 2複選框始終在模型
<%= Html.CheckBoxFor(x => x.IsSendingQualitySurvey) %>/>
,我得到了典型的2形式的值:
IsSendingQualitySurvey: true
IsSendingQualitySurvey: false
這對於mvc modelbinder處理複選框的方式非常有效。
然後在控制器動作:
[HttpPost]
public ActionResult Edit(Guid id, TicketEditViewModel ticketEditViewModel)
ticketEditViewModel.IsSendingQualitySurvey
(正常布爾)始終爲false。
我沒有任何自定義模型粘合劑,它在別處工作。 奇怪的是我有另一種觀點認爲前一段,同樣的問題,我必須手動創建輸入,如下所示:
<input type="checkbox" value="true" name="<%=Html.NameFor(x => x.IsRequestingVisit) %>" id="<%=Html.NameFor(x => x.IsRequestingVisit) %>" />
這個工作,但是當我複製到完全相同的另一種觀點認爲,價值始終是虛假的。
Wheres the catch?
謝謝。
我忘了說,該模型實際上是填補了正確的方式,只是一個屬性缺失。另外我不認爲模型綁定器會關心前綴,因爲它甚至不會轉換爲輸入的結果,您確定嗎? – 2012-01-17 17:44:28
模型聯編程序查看查詢字符串或表單集合中包含的值並嘗試按名稱綁定屬性。客戶端的ID /名稱字段(由HTML幫助程序生成)包含名稱空間,並且是用於變量的命名約定的直接結果。如果你有複雜的模型,或者你在頁面上創建變量,你會注意到HTML Helper會在你的控件上生成與你的變量名匹配的前綴。模型聯編程序中可能會有一些邏輯來涵蓋不匹配的名稱,但我不能肯定地說沒有挖出反射器。 – 2012-01-17 17:50:07
嗯,所以也許是因爲我傳遞了兩個參數,活頁夾可能會引入命名空間,並且在那種情況下由於我的約定沒有找到模型參數?還沒有看到這些名稱空間。我明天會看看,謝謝至今。 – 2012-01-17 18:17:55