2013-02-11 37 views
6

Trong ứng dụng ASP.NET MVC, tôi có hai nút radio. Tùy thuộc vào giá trị boolean trong mô hình, Làm cách nào để bật hoặc tắt các nút radio? (Các giá trị của các nút radio cũng là một phần của mô hình)ASP.NET MVC vô hiệu hóa các nút radio với cú pháp Razor

nút radio của tôi hiện trông như thế này -

  @Html.RadioButtonFor(m => m.WantIt, "false") 
      @Html.RadioButtonFor(m => m.WantIt, "true") 

Trong mô hình, tôi có một tài sản gọi là model.Alive. Nếu model.Alivetrue Tôi muốn bật nút radio, nếu khác model.Alivefalse, tôi muốn tắt nút radio. Cảm ơn!

+0

đặt css để bật hoặc tắt hoặc ẩn hiển thị các nút radio. Bạn cũng không thể hiển thị các nút radio. –

+0

Có cách nào tiêu chuẩn "Razor/ASP.NET/MVC" để thực hiện việc này không? –

+0

'if (Model.Alive) {setcss enabled hoặc @ Html.RadioButonFor // Hiển thị nút radio}' Chỉ cần kiểm tra trạng thái mô hình nếu thuộc tính được đặt đúng hoặc không tạo nút radio ở tất cả –

Trả lời

22

Bạn có thể vượt qua các giá trị trực tiếp như htmlAttributes như vậy:

@Html.RadioButtonFor(m => m.WantIt, "false", new {disabled = "disabled"}) 
@Html.RadioButtonFor(m => m.WantIt, "true", new {disabled = "disabled"}) 

Nếu bạn cần phải kiểm tra cho model.Alive sau đó bạn có thể làm một cái gì đó như thế này:

@{ 
    var htmlAttributes = new Dictionary<string, object>(); 
    if (Model.Alive) 
    { 
     htmlAttributes.Add("disabled", "disabled"); 
    } 
} 

Test 1 @Html.RadioButton("Name", "value", false, htmlAttributes) 
Test 2 @Html.RadioButton("Name", "value2", false, htmlAttributes) 

Hy vọng rằng sẽ giúp

+0

Câu trả lời hay! Cảm ơn amhed! –

0

Hoặc cung cấp quá tải cho RadioButtonFor?

public static MvcHtmlString RadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, bool isDisabled, object htmlAttributes) 
    { 
     var linkAttributes = System.Web.Mvc.HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 
     Dictionary<string, object> htmlAttributesDictionary = new Dictionary<string, object>(); 
     foreach (var a in linkAttributes) 
     { 
      if (a.Key.ToLower() != "disabled") 
      { 
       htmlAttributesDictionary.Add(a.Key, a.Value); 
      } 

     } 

     if (isDisabled) 
     { 
      htmlAttributesDictionary.Add("disabled", "disabled"); 
     } 

     return InputExtensions.RadioButtonFor<TModel, TProperty>(htmlHelper, expression, value, htmlAttributesDictionary); 
    } 
1

Câu trả lời của tôi sẽ giống như câu trả lời của ahmed. Vấn đề duy nhất là, tài sản WantIt sẽ không được gửi khi gửi vì nó bị bỏ qua do thuộc tính html bị vô hiệu hóa. Giải pháp là thêm Ẩn danh trên RadioButtonFors như sau:

@Html.HiddenFor(m => m.WantIt) 
@Html.RadioButtonFor(m => m.WantIt, "false", new {disabled = "disabled"}) 
@Html.RadioButtonFor(m => m.WantIt, "true", new {disabled = "disabled"}) 

Bằng cách đó, tất cả các giá trị được hiển thị và bạn nhận lại boolean khi gửi.

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