2011-11-13 51 views
9

Tôi có một nhiệm vụ có vẻ dễ dàng là thiết lập nút radio "được kiểm tra" dựa trên giá trị boolean của mô hình. Tôi có một boolean trong mô hình của tôi "IsSDPDonor" mà tôi muốn sử dụng nó cho Yes/No Radio nút. Nút radio "Có" phải được kiểm tra nếu nút "IsSDPDonor" là true và "No" khi nó sai. Tôi đã thử sử dụng mã bên dưới nhưng nó luôn kiểm tra nút radio "Không".Nút radio kiểm tra asp.net mvc3 dựa trên mẫu

@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 

Tôi cảm thấy hơi thất vọng, vì vậy tôi nghĩ rằng tôi muốn nhận được sự trợ giúp. Về cơ bản, cú pháp HTML nói để chỉ đặt thuộc tính "Đã kiểm tra" mà không có bất kỳ giá trị nào để kiểm tra nút radio. Tôi đã tự hỏi làm thế nào tôi sẽ làm điều đó bằng cách sử dụng cú pháp dao cạo MVC3.

+1

tại sao sử dụng '@ checked' thay vì' checked' trong định nghĩa đối tượng ẩn danh? Ngoài ra, sử dụng 'checked =" checked "' sẽ có tác dụng tương tự như kiểm tra không có giá trị, với ít vấn đề tương thích – smartcaveman

+1

@smartcaveman vì 'checked' là từ khóa bạn phải sử dụng' @ 'để phân biệt nó như là một biến (tên thuộc tính, trong trường hợp này). – tvanfosson

Trả lời

13

Tạo tùy chọn HTML trong khối mã, để trống nếu không chọn nút, sau đó sử dụng biến thích hợp trong trình trợ giúp của bạn.

@{ 
    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 

EDIT: Sau khi xem xét mã nguồn, nó xuất hiện với tôi rằng nó nên được thiết lập thuộc tính này dựa trên giá trị của mô hình. Bạn đã thử bỏ qua hoàn toàn các thuộc tính HTML chưa?

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

Nhanh và Tốt. Cảm ơn rất nhiều – Jatin

+0

@Nirvan xem cập nhật của tôi – tvanfosson

+0

Cảm ơn bạn đã chỉ ra rằng trong bản cập nhật của mình. Thật vậy, chúng tôi không cần bất kỳ thuộc tính html nào trong trường hợp này. Nó chỉ hoạt động. Tuyệt quá. Cảm ơn một lần nữa. – Jatin

Các vấn đề liên quan