2011-11-13 25 views
9

我有一個看似簡單的任務,根據模型的布爾值設置一個單選按鈕「checked」。我在我的模型「IsSDPDonor」中有一個布爾值,我想將其用於Yes/No Radio按鈕。如果「IsSDPDonor」爲真,則應檢查「是」單選按鈕;如果爲「否」,則爲單選按鈕。我試圖使用下面的代碼,但它總是檢查「否」單選按鈕。asp.net mvc3檢查基於模型的單選按鈕

@Html.Label("Would You Like to Donate Platelets (SDP)") : 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, true, new {@checked = Model.Donor.IsSDPDonor ? "checked" : ""}) Yes 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, false, new { @checked = !Model.Donor.IsSDPDonor ? "checked" : "" }) No 

我有些沮喪,所以我覺得我寧願幫助一下。基本上,HTML語法表示只放入沒有任何值的「Checked」屬性來檢查一個單選按鈕。我想知道如何使用MVC3剃鬚刀語法。

+1

爲什麼在匿名對象定義中使用'@ checked'而不是'checked'?同樣,使用'checked ='勾選的''應該與檢查沒有值的效果相同,兼容性問題更少 – smartcaveman

+1

@smartcaveman因爲'checked'是一個關鍵字,您必須使用'@'將它區分爲變量(屬性名稱,在這種情況下)。 – tvanfosson

回答

13

在代碼塊中創建HTML選項,如果不應該檢查該按鈕,則將它們留空,然後在助手中使用適當的變量。

@{ 
    var yesOptions = Model.Donor.IsSDPDonor ? new { @checked = "checked" } : null; 
    var noOptions = Model.Donor.IsSDPDonor ? null : new { @checked = "checked" }; 
} 
@Html.Label("Would You Like to Donate Platelets (SDP)") : 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, true, yesOptions) Yes 
@Html.RadioButtonFor(m => m.Donor.IsSDPDonor, false, noOptions) No 

編輯:查看源代碼後,在我看來,它應該基於模型的值設置該屬性。您是否嘗試完全忽略HTML屬性?

case InputType.Radio: 
    if (!usedModelState) { 
     string modelStateValue = htmlHelper.GetModelStateValue(name, typeof(string)) as string; 
     if (modelStateValue != null) { 
      isChecked = String.Equals(modelStateValue, valueParameter, StringComparison.Ordinal); 
      usedModelState = true; 
     } 
    } 
    if (!usedModelState && useViewData) { 
     isChecked = htmlHelper.EvalBoolean(name); 
    } 
    if (isChecked) { 
     tagBuilder.MergeAttribute("checked", "checked"); 
    } 
    tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue); 
    break; 
+0

快速和很好。非常感謝 – Jatin

+0

@Nirvan查看我的更新 – tvanfosson

+0

感謝您在更新中指出這一點。事實上,在這種情況下,我們不需要任何html屬性。它只是工作。大。再次感謝。 – Jatin