2013-09-23 64 views
8

Khi tiêu đề nói rằng tôi đang tìm kiếm một số trợ giúp trong công việc đó, tôi đã đọc nhiều hướng dẫn về nó nhưng không ai trong số họ có thể giải quyết được vấn đề của tôi để tải một dropdownlistfor từ cơ sở dữ liệu. Cho đến nay, tôi đã đoạn mã sau:Làm thế nào để điền một danh sách thả xuống từ cơ sở dữ liệu trong ASP.NET MVC 4

**LNClientes():** 

public List<ENDistrito> DistritoListar() 
{ 
    return new ADClientes().DistritoListar(); 
} 

**ADClientes():** 

public List<ENDistrito> DistritoListar() 
     { 
      Database oDatabase =      DatabaseFactory.CreateDatabase(ConfigurationManager.AppSettings["conexionBD"]); 
      DbCommand odbcommand = oDatabase.GetStoredProcCommand("USP_SEL_DISTRITOS"); 

      List<ENDistrito> lista = new List<ENDistrito>(); 
      using (IDataReader reader = oDatabase.ExecuteReader(odbcommand)) 
      { 
       while (reader.Read()) 
        lista.Add(new ENDistrito(reader)); 
      } 
      return lista; 
     } 

**Controller:** 

public ActionResult Registrar() 
     { 
      ViewBag.Message = Resources.Language.Title_Page_MC_C; 
      var ListaDistrito = new LNClientes().DistritoListar(); 
      ViewBag.ObtenerDistrito = new SelectList(ListaDistrito, "IdDistrito", "DescripcionDistrito"); 
      return View(); 
     } 

Xem:

<div class="editor-field"> 
      @Html.EditorFor(model => model.DistritoCliente) 
      @Html.DropDownListFor(model => model.DistritoCliente,(SelectList)ViewBag.ObtenerDistrito,"--Seleccione--") 
      @Html.ValidationMessageFor(model => model.DistritoCliente) 
     </div> 

Till điểm tất cả mọi thứ này là ok, khi tôi mở hình thức mà các dropdownlistfor công trình nhưng khi tôi gửi biểu mẫu tôi đã nhận thông báo sau:

Không có mục ViewData loại 'IEnumerable' mà có khóa 'DistritoCliente'.

Bất kỳ ý tưởng nào về những gì tôi đang làm sai hoặc cách tôi có thể giải quyết vấn đề này.

Xin cảm ơn trước.

Alex

+0

Tại sao bạn sử dụng trình đọc dữ liệu khi bạn chỉ đọc tất cả dữ liệu của mình vào danh sách cùng một lúc? –

+0

http://stackoverflow.com/questions/2849341/there-is-no-viewdata-item-of-type-ienumerableselectlistitem-that-has-the-key có khắc phục được sự cố của bạn không? –

+0

tôi theo dõi bài viết và vẫn chưa giải quyết được vấn đề của mình ~ tôi đã thay đổi một số thứ như trong controller im làm điều này: ViewData ["Distritos"] = new SelectList (mới LNClientes(). DistritoListar(), "IdDistrito", "DescripcionDistrito"); nhưng vấn đề vẫn là khai báo danh sách thả xuống là @ Html.DropDownListFor (Model => Model.DistritoCliente, ((SelectListItem) ViewData ["Distrito"])) nhưng nó ném lỗi đối số, bất kỳ ý tưởng nào khác để giải quyết nó – Alex

Trả lời

18

Làm thế nào tôi thường xây dựng Dropdowns của tôi là như thế này

@Html.DropDownListFor(x => x.Field, PathToController.GetDropDown()) 

và sau đó trong điều khiển của bạn có một phương pháp được xây dựng như thế này

public static List<SelectListItem> GetDropDown() 
    { 
     List<SelectListItem> ls = new List<SelectListItem>(); 
     lm = (call database); 
     foreach (var temp in lm) 
     { 
      ls.Add(new SelectListItem() { Text = temp.name, Value = temp.id }); 
     } 
     return ls; 
    } 

Hy vọng nó giúp.

+0

PathToController là gì? – Alex

+0

đặt trong tên bộ điều khiển của bạn và gõ ctrl-. sẽ mang lại đường dẫn đầy đủ đến bộ điều khiển của bạn (dự án, khu vực, contoller, một cái gì đó như thế) –

+0

Cuối cùng nó hoạt động, nhờ sự giúp đỡ! – Alex

3

Bộ điều khiển:

ViewBag.States = new SelectList(db.States, "StateID", "StateName"); 

View: (In your view write the code for dropdown like this) 

@Html.DropDownListFor(m => m.Address.StateID,ViewBag.States as SelectList,"--Select State--") 

-> Đây Địa chỉ thuộc một trong các bảng trong cơ sở dữ liệu của tôi có StateID là một trong những thuộc tính của nó

một này làm việc hoàn hảo đối với tôi .. Hãy thử nó !!