2010-05-18 26 views
13

Tôi đang sử dụng trình trợ giúp Html.DropDownList trong ASP.NET MVC và tôi muốn làm cho nó chỉ đọc. Thật không may, tôi cũng cần nó để gửi giá trị của nó trên một bài đăng mẫu.Thực hiện một danh sách thả xuống chỉ đọc nhưng vẫn gửi giá trị của nó

Tôi đã tìm thấy (thông qua một similar question on SO) rằng việc sử dụng định dạng dưới đây sẽ làm cho trình đơn thả xuống chỉ đọc nhưng nó sẽ không cung cấp quyền truy cập vào giá trị của điều khiển trong bộ điều khiển.

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" }) 

Có ai biết cách tạo danh sách thả xuống chỉ đọc hoặc vô hiệu hóa với ASP.NET MVC trong khi cũng cho phép gửi bài đăng biểu mẫu không?

+0

Nó thực sự kỳ lạ: Chúng tôi đã sử dụng mã mà bạn đưa vào câu hỏi của bạn, và nó đã làm việc tốt cho chúng ta cho đến tuần này. Tôi nghi ngờ bản cập nhật cho MVC 3 hoặc các tính năng Xác thực phía máy khách mà chúng tôi đã thêm gần đây. – StriplingWarrior

Trả lời

19

Hành vi dự định ở phía trình duyệt web - điều khiển bị tắt sẽ không đăng dữ liệu đó lên máy chủ khi biểu mẫu được gửi.

Bạn có thể giả mạo nó bằng cách đặt trường ẩn trên trang có giá trị trong đó - chỉ cần chắc chắn xác thực dữ liệu. Hoặc sử dụng javascript để bật trường trước khi tác vụ gửi xảy ra.

Nếu bạn vô hiệu hóa một trường, nhưng vẫn hiển thị nó trên trang với một số giá trị, thì phải có cách để bạn biết giá trị đó mà không cần gửi lại từ trình duyệt đến máy chủ.

+2

Câu trả lời hay. –

+0

@Prescott câu trả lời hay – User

7
  1. Biến nó thành hộp văn bản thay thế.
  2. Thêm một sự kiện thay đổi với JavaScript:

    $('#dropdown').change(function(e) { e.preventDefault(); });

  3. Có một danh sách thả xuống với chỉ 1 mục trong đó.

  4. Có một mục ẩn với giá trị thực tế của menu thả xuống trong đó, để được gửi ngay cả khi menu thả xuống bị tắt không.
10

Bạn có thể bật tính năng này khi gửi. Nhược điểm: có vẻ lạ.

$(form).submit(function() { 
    $('#Types').removeAttr('disabled'); 
}); 

hoặc sao chép giá trị vào trường ẩn khi gửi.

$(form).submit(function() { 
    $('#HiddenField').val($('#Types').val()); 
}); 
1

Chỉ cần thay đổi biểu định kiểu của mục đó.

visibility:"visible" 
visibility:"hidden" 

Để biết thêm thông tin, hãy xem http://support.microsoft.com/kb/199243.

Bạn vẫn sẽ nhận được đăng lại nhưng bạn cũng sẽ không nhìn thấy nó nữa.

0

tôi nghĩ rằng giải pháp tốt nhất là gửi nó qua

$.post(url, 
{ 
    AID: val1, 
    CID: val2 
}, 
    function (data) { 
    // act on model 
    } 
); 
Các vấn đề liên quan