2016-03-02 22 views
5

Tôi tin rằng tôi đã ràng buộc dữ liệu của mình một cách chính xác, nhưng dường như tôi không thể nhận được thuộc tính văn bản của mình cho mỗi SelectListItem để hiển thị chính xác.Tại sao tôi nhận được "System.Web.Mvc.SelectListItem" trong DropDownList của tôi?

mô hình của tôi:

public class Licenses 
    { 
     public SelectList LicenseNames { get; set; } 
     public string SelectedLicenseName { get; set; } 
    } 

Bộ điều khiển:

[HttpGet] 
    public ActionResult License() 
    { 
     try 
     { 
      DataTable LicsTable = BW.SQLServer.Table("GetLicenses", ConfigurationManager.ConnectionStrings["ProfressionalActivitiesConnection"].ToString()); 
      ProfessionalActivities.Models.Licenses model = new ProfessionalActivities.Models.Licenses(); 
      model.LicenseNames = new SelectList(LicsTable.AsEnumerable().Select(row => 
      new SelectListItem 
      { 
       Value = row["Description"].ToString(), 
       Text = "test" 
      })); 
      return PartialView("_AddLicense", model); 
     } 
     catch (Exception ex) 
     { 
      var t = ex; 
      return PartialView("_AddLicense"); 
     } 
    } 

Xem:

@Html.DropDownList("LicenseNames", new SelectList(Model.LicenseNames, "Value", "Text", Model.LicenseNames.SelectedValue), new { htmlAttributes = new { @class = "form-control focusMe" } }) 
+1

Ngoài câu trả lời của Shyju, lưu ý rằng tham số thứ 2 của 'DropDownList()' là 'IEnumerable '. Bạn tạo ra nó bằng cách sử dụng 'new SelectListItem {Value = row [" Description "]. ToString(), Text =" test "})' đó là tất cả những gì bạn cần. Tạo một cái giống hệt nhau thứ hai trong bộ điều khiển bằng cách sử dụng 'new SelectList()' (nơi bạn quên đặt thuộc tính 'Text' và' Value') và sau đó tạo ra một cái giống hệt thứ 3 trong khung nhìn chỉ là vô nghĩa. –

Trả lời

7

Sử dụng Items sở hữu tài sản LicenseNames của bạn mà là loại SelectList

@Html.DropDownList("SelectedLicenseName", new SelectList(Model.LicenseNames.Items, 
             "Value", "Text", Model.LicenseNames.SelectedValue)) 

Hoặc với phương pháp DropDownListFor helper

@Html.DropDownListFor(d=>d.SelectedLicenseName, 
             Model.LicenseNames.Items as List<SelectListItem>) 

Vì vậy, khi bạn gửi biểu mẫu, bạn có thể kiểm tra việc SelectedLicenseName tài sản

[HttpPost] 
public ActionResult Create(Licenses model) 
{ 
    //check model.SelectedLicenseName 
} 
+0

Ok hoạt động. Bây giờ làm thế nào để tôi có được giá trị được chọn từ SelectList được gán cho thuộc tính SelectedLicenseName của tôi khi tôi POST? – JzInqXc9Dg

+0

Xem câu trả lời cập nhật của tôi. Bạn cần sử dụng tên phần tử biểu mẫu là "SelectedLicenseName" và đọc rằng khi biểu mẫu được đăng. – Shyju

+0

vì vậy sử dụng tùy chọn thứ hai của bạn - một với DropDownListForm, tôi nhận được lỗi này khi tôi cố gắng gọi một phần xem ban đầu. Thông tin bổ sung: Không có mục ViewData loại 'IEnumerable ' có khóa 'SelectedLicenseName'. – JzInqXc9Dg

0

tôi đặt một cách rõ ràng những cái tên dataValueFielddataTextField.

new SelectListItem 
{ 
    Value = row["Description"].ToString(), 
    Text = "test" 
}), "Value", "Text"); 

Sau đó, không cần phải viết Model.LicenseNames.Items as List<SelectListItem> trong chế độ xem của bạn (như được đề xuất trong câu trả lời được chấp nhận).

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