2012-09-06 31 views
5

Tôi đang phát triển một ứng dụng MVC có chứa danh sách thả xuống nhiều lựa chọn. Tôi muốn nhận ID của nhiều mục được chọn trong menu thả xuống.Làm cách nào để chuyển các mục đã chọn của danh sách chọn nhiều trở lại bộ điều khiển?

Tôi có đoạn code trong mô hình

namespace CustomerDEMOForMultiselect.Models 
{ 
    public class Customer 
    { 
     private int _ID; 
     private string _Name; 
     private double _Amt; 
     public int ID { get { return _ID; } set { _ID = value; } } 
     public string Name { get { return _Name; } set { _Name = value ; } } 
     public double Amt { get { return _Amt; } set { _Amt = value; } } 
    } 
} 

Và điều khiển Mã là

namespace CustomerDEMOForMultiselect.Controllers 
{ 
    public class CustomerController : Controller 
    { 
     public ActionResult DisplayCustomer() 
     { 
      Customer oCustomer = new Customer(); 
      List<Customer> CustomersList = new List<Customer>(); 
      CustomersList.Add(new Customer() { ID = 1, Name = "TestCustomer1", Amt = 123 }); 
      CustomersList.Add(new Customer() { ID = 2, Name = "TestCustomer2", Amt = 234 }); 
      CustomersList.Add(new Customer() { ID = 3, Name = "TestCustomer3", Amt = 324 }); 
      ViewBag.CustList = CustomersList; 
      return View(CustomersList); 
      } 
    } 
} 

tôi không nhận được những gì viết trong View, Tôi đã thử đoạn mã khác nhau nhưng tôi nhận được khó hiểu .. .

Mã trong Xem:

@model CustomerDEMOForMultiselect.Models.Customer 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>DisplayCustomer</title> 
    </head> 
    <body> 
     <div> 
      @using (Html.BeginForm()) 
      { 
       @Html.DropDownListFor(v => v.ID, new MultiSelectList(ViewBag.CustList,"ID","Name",ViewBag.ID)) 
       <br /> 
       <input type="submit" value="Submit" /> 
      } 
     </div> 
    </body> 
</html> 

Tôi muốn hiển thị số CustomerName list trong Chế độ xem, vì vậy tôi có thể chọn nhiều tên khách hàng và chuyển các ID khách hàng đó trở lại bộ điều khiển. Làm thế nào để làm điều đó?

+0

Bạn có thể đăng những gì bạn đã thử cho đến nay trong chế độ xem không? Chế độ xem của bạn có tham chiếu 'CustomerList' làm mô hình ở định dạng mong muốn không? Ví dụ: '@model IList '. Bạn cũng nên khai báo danh sách dưới dạng 'IList ' thay vì 'Danh sách ' trong mã của bạn. – Nope

+0

Tôi đã sử dụng Mã sau đây. '@model CustomerDEMOForMultiselect.Models.Customer @ { Bố cục = null; } DisplayCustomer

@using (Html.BeginForm()) { @Html.DropDownListFor(v => v.ID,new MultiSelectList(ViewBag.CustList,"ID","Name",ViewBag.ID))
}
' – bnil

+0

tôi đã thêm mã cho câu hỏi của bạn, dễ dàng hơn để đọc :) – Nope

Trả lời

15

Sử dụng một mô hình bao bọc với một tài sản để ràng buộc các khách hàng lựa chọn để công trình (Tôi đã thử nó):

Wrapper mẫu:

public class CustomerList 
{ 
    public List<Customer> Customers { get; set; } 
    public List<int> SelectedIDs { get; set; } 
} 

Bộ điều khiển:

 [HttpGet] 
     public ActionResult DisplayCustomer() 
     { 
      Customer oCustomer = new Customer(); 
      List<Customer> CustomersList = new List<Customer>(); 
      CustomersList.Add(new Customer() { ID = 1, Name = "TestCustomer1", Amt = 123 }); 
      CustomersList.Add(new Customer() { ID = 2, Name = "TestCustomer2", Amt = 234 }); 
      CustomersList.Add(new Customer() { ID = 3, Name = "TestCustomer3", Amt = 324 }); 
      ViewBag.CustList = CustomersList; 
      return View(new CustomerList() { Customers = CustomersList }); 

     } 

     [HttpPost] 
     public void DisplayCustomer(List<int> selectedIds) 
     { 
      // do something with the id list 
     } 

Xem:

@model MvcApplication2.Models.CustomerList 

@using (Html.BeginForm(@Model.SelectedIDs)) 
{ 
    @Html.ListBoxFor(m => m.SelectedIDs, new MultiSelectList(@Model.Customers, "ID", "Name", @Model.SelectedIDs)) 
    <input type="submit" value="save" /> 
} 

Bạn cần một cái gì đó để ràng buộc lựa chọn của bạn và gửi nó trở lại bộ điều khiển.

+0

Cảm ơn Nathalie KELLENBERGER, ở đâu thêm lớp trình bao bọc này? Trong chính mô hình khách hàng? – bnil

+0

Tôi có phải thêm chế độ xem được nhập mạnh không? Tôi đã tạo ra chế độ xem trống.I đang báo lỗi trên '@ Model.Customer' Và lỗi là 'System.Web.Mvc.MultiSelectList.MultiSelectList (System.Collections.IEnumerable, string, string, System.Collections.IEnumerable)' có một số đối số không hợp lệ – bnil

+0

Cảm ơn ... Nó hoạt động .. – bnil

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