2012-06-21 41 views
6

Trong ứng dụng MVC3 của tôi, tôi có một danh sách thả xuống. Trong đó tôi phải hiển thị tất cả các kết quả, nhưng một số kết quả phải được vô hiệu hóa, để họ không thể lựa chọn. Làm thế nào tôi có thể làm điều đó?DropDownListFor gọi lại hoặc nếu tuyên bố

Đây là những gì tôi có ngay bây giờ. Nó chỉ đơn giản là không hiển thị những người chơi có Đã tắt được đặt thành đúng.

@Html.DropDownListFor(m => m.Position1, Model.SelectedTeam.TeamPlayers 
        .Where(c => c.Player.Disabled == false) 
        .OrderBy(t => t.Player.Lastname) 
        .ToSelectList(m => m.FullName, m => m.PlayerId)) 

Vậy là có một cách khác cũng cho thấy các cầu thủ người khuyết tật, nhưng điều đó đầu ra sẽ là như thế này, thay vì chỉ che giấu chúng hoàn toàn:

<select> 
    <option>Player 1</option> 
    <option disabled="disabled">Player 2</option> 
    <option>Player 3</option> 
    <option>Player 4</option> 
    <option disabled="disabled">Player 5</option> 
    <option>Player 6</option> 
</select> 

Là có thể với một DropDownListFor?

+3

Bạn luôn có thể sử dụng một phương pháp mở rộng và viết của riêng bạn? – Kane

+0

Đừng bao giờ đặt các truy vấn LINQ trong Chế độ xem –

Trả lời

2

OK, đây là 'cách khó' để thực hiện. :) Có thể ai đó khác sẽ có ý tưởng tốt hơn.

Trước tiên, bạn cần phải khác biệt giữa các mục nhập hợp lệ và bị vô hiệu hóa trong danh sách lựa chọn - và cách duy nhất để thực hiện điều này là value hoặc text trong số option. Hãy nói rằng các giá trị không hợp lệ sẽ có value == "disabled", nếu không nó là một ID hợp lệ:

//Somewhere in the controller 
... 
var list = yourViewModel.SelectedTeam.TeamPlayers.OrderBy(p => p.LastName).Select(new SelectListItem 
    { 
     Text = item.LastName, 
     Value = item.Disabled ? "disabled" : item.PlayerId.ToString() 
    }).ToList(); 

//pass it however you want, in the model or by ViewBag 
ViewBag.MyDropDownList = new SelectList(list, "Value", "Text"); 

Và sau đó trong giao diện

@Html.DropDownListFor(model => model.Position1, ViewBag.MyDropDownList as SelectList); 
$(document).ready(function() 
{ 
    $(#"Position1 option[value=\"disabled\"]").prop("disabled",true); 
}); 
+0

tốt đẹp, làm cho nó hoạt động với điều này :) – w00

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