2012-06-14 35 views
6

Tôi có một mô hình:Lấy văn bản từ Html.DropdownListFor .... MVC3

public class DocumentModel 
{ 
    public int TypeID { get; set; } 
    public List<SelectListItem> DocumentTypes { get; set; } 
} 

tôi có một cái nhìn:

@Html.DropDownListFor(x => x.TypeID, Model.DocumentTypes, "- please select -") 

tôi cư thả tôi xuống

 var model = new DocumentModel(); 
     model.DocumentTypes = GetDocumentTypes(); 

private static List<SelectListItem> GetDocumentTypes() 
    { 

     var items = new List<SelectListItem> 
         { 
          new SelectListItem 
           {Text = @"Text #1", Value = "1"}, 
          new SelectListItem 
           {Text = @"Text #2", Value = "2"}, 
         }; 

     return items; 

    } 

Tôi có một hành động điều khiển khi biểu mẫu được đăng lại:

[HttpPost] 
    public void UploadDocument(DocumentModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // I want to get the text from the dropdown 
     } 
    } 

Làm cách nào để nhận văn bản từ danh sách thả xuống của tôi? Cảm ơn

+0

bạn có muốn truy xuất mục đã chọn không? –

+0

Tôi tin rằng khi gửi biểu mẫu có chứa danh sách thả xuống, chỉ có 'VALUE' được chọn được gửi. Bạn có thể lấy giá trị và tìm kiếm văn bản từ danh sách hoặc bạn có thể mở rộng và lập kế hoạch cho nó và chuyển nó trong một '@ Html.HiddenFor()'. – user1166147

Trả lời

17

Bạn có thể không nhận được điều này một cách dễ dàng với mô hình ràng buộc mặc định. Bạn có một giải pháp nhỏ như thế này.

1) Thêm một tài sản mới để mô hình của bạn/viewmodel để lưu trữ các văn bản đã chọn

public class DocumentModel 
{ 
    public int TypeID { get; set; } 
    public List<SelectListItem> DocumentTypes { get; set; } 
    public string SelctedType { set;get;} 
} 

2) Sử dụng phương pháp Html.HiddenFor Helper để tạo ra một biến ẩn trong các hình thức cho thuộc tính này

@Html.HiddenFor(x => x.SelctedType) 

3) Sử dụng ít javascript để ghi đè quá trình gửi! I E; Khi người dùng gửi biểu mẫu, Lấy văn bản đã chọn từ menu thả xuống và đặt giá trị đó làm giá trị của trường Ẩn.

$(function() { 
    $("form").submit(function(){ 
     var selTypeText= $("#TypeID option:selected").text(); 
     $("#SelctedType").val(selTypeText);   
    }); 
}); 

Bây giờ trong phương pháp hành động HTTPPost của bạn, Điều này sẽ có sẵn trong SelectedType tài sản.

[HttpPost] 
public void UploadDocument(DocumentModel model) 
{ 
    if(ModelState.IsValid) 
    { 
     string thatValue=model.SelectedType; 
    } 
} 
+0

Cảm ơn bạn đã trả lời, nhưng model.SelectedType là null khi UploadDocument được gọi.Im vẫn thiếu nội dung nào đó – BoundForGlory

+0

@ user1202717: Sử dụng cảnh báo ở Bước 3 trước khi gửi biểu mẫu (ngay sau khi đặt giá trị trường ẩn) để xem bạn có đặt đúng không – Shyju

+1

Nó hoạt động. Tôi thấy bạn đã thay đổi dòng này 'var selTypeText = $ ("# TypeID option: selected"). Text();' Người đàn ông tôi không thể tin rằng dropdowns là một nỗi đau trong mVC. Cảm ơn – BoundForGlory

2

nếu những gì bạn muốn làm là để lấy mục đã chọn thì đây có thể làm việc:

var selecteItem = model.DocumentTypes.Where(item=>item.Selected).FirstOrDefault(); 

Cheers!

+0

Tôi chạy này và selectedItem là null – BoundForGlory

1

Mở mô hình của bạn tôi sẽ có một chuỗi -

public string Selected{ get; set; } 

sau đó theo quan điểm của bạn:

@Html.DropDownListFor(model => model.Selected, new SelectList(Model.DocumentTypes, "Value", "Text")) 
+0

Tôi đã thử điều này và chạy dòng mã này 'var selecteItem = model.DocumentTypes.Where (item => item.Selected) .irstOrDefault();' và selectedItem vẫn là null – BoundForGlory

+0

Bạn không cần phải có công cụ var etc. Trong bộ điều khiển của bạn, bạn nên đơn giản có thể làm chuỗi được chọn = model.Selected; Nếu sau đó bạn có điểm ngắt trên dòng tiếp theo, chuỗi được chọn sẽ có giá trị từ menu thả xuống. –

1

tôi tình cờ ở đây cố gắng tìm cách để có được những giá trị văn bản ra khỏi một SelectList để hiển thị nó ở định dạng khác với DropDownList (tôi đang sử dụng Edit ViewModel của mình vì nó có tất cả dữ liệu tôi yêu cầu)

var text = selectList.Where(q => q.Selected == true).First().Text; 
Các vấn đề liên quan