2012-07-05 32 views
19

Tôi có ứng dụng ASP.NET MVC. Tôi đang có nhiều danh sách thả xuống trong trang của tôi (HTML SELECT), tôi phải vô hiệu hóa chúng, khi người dùng cứ chọn từng cái một. Khi người dùng đăng nó trở lại bộ điều khiển, tôi nhận được null như tham số của hàm (action method). Tôi đã tìm kiếm và thấy rằng HTML không gửi giá trị của các trường bị vô hiệu hóa trong dữ liệu biểu mẫu. Thay thế thuộc tính bị vô hiệu hóa bằng chỉ đọc sẽ không hoạt động vì nó sẽ làm cho trình đơn thả xuống hoạt động.Nhận giá trị của trình đơn thả xuống bị tắt trong asp.net mvc

Tôi tạo trình đơn thả xuống động bằng javascript khi người dùng tiếp tục. Vì vậy, không có một danh sách thả xuống duy nhất, nhưng nhiều như người dùng muốn.

Ai đó có thể vui lòng cho tôi biết làm cách nào để nhận các giá trị?

Trả lời

40

Một khả năng là để làm cho danh sách thả xuống disabled="disabled" và bao gồm một lĩnh vực tiềm ẩn có cùng tên và giá trị mà sẽ cho phép để gửi giá trị này đến máy chủ:

@Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" }) 
@Html.HiddenFor(x => x.FooId) 

Nếu bạn phải vô hiệu hóa các thả xuống tự động với javascript sau đó chỉ cần chỉ định giá trị hiện được chọn của menu thả xuống cho trường ẩn sau khi vô hiệu hóa nó.

3

Đây là hành vi mặc định của các điều khiển bị tắt. Tôi đề nghị bạn thêm một lĩnh vực ẩn và thiết lập giá trị của DropDownList của bạn trong lĩnh vực này ẩn và làm việc với điều này.

Cái gì như:

//just to create a interface for the user 
@Html.DropDownList("categoryDump", (SeectList)ViewBag.Categories, new { disabled = "disabled" }); 
// it will be send to the post action 
@Html.HiddenFor(x => x.CategoryID) 
0

Bạn cũng có thể tạo ra tình trạng quá tải DropDownListFor của riêng bạn mà chấp nhận một tham số bool disabled và làm việc nặng nhọc cho bạn để xem bạn không phải là lộn xộn với if disablethisfield then ....

Something trong những dòng này có thể làm:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, bool disabled) 
{ 
    if (disabled) 
     return MvcHtmlString.Create(htmlHelper.HiddenFor(expression).ToString() + htmlHelper.DropDownListFor(expression, selectList, new { disabled="disabled" }).ToString()); 
    else 
     return htmlHelper.DropDownListFor(expression, selectList); 
} 

Có 6 quá tải cho mình DropDownListFor vì vậy nó rất nhiều monkeycoding nhưng thưởng phạt trong IMHO kết thúc.

-2

trước khi gửi cuộc gọi $ ('# FooId'). RemoveAttr ('disabled')

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