2012-09-06 24 views
5

私はマルチ選択ドロップダウンリストを含むMVCアプリケーションを開発しています。 ドロップダウンの複数の選択項目のIDを取得したいとします。私はモデル複数選択リストの選択したアイテムをコントローラに戻すにはどうすればいいですか?

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; } } 
    } 
} 

でコードを持っているし、コントローラのコードは、私が見るに書くために何を得ていないのです

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); 
      } 
    } 
} 

ある

、私は別のコードを試してみましたが、私は混乱取得しています。.. 。ビューで

コード:

@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> 

ビューにCustomerName listを表示したいので、複数の顧客名を選択し、選択した顧客IDをコントローラに戻すことができます。 どうすればいいですか?

ラッパーモデル::(私はそれを試してみました)作品を選択した顧客をバインドするプロパティを持つラッパーモデルを使用して

+0

これまでに試したことをビューに投稿できますか?あなたのビューは期待されるフォーマットのモデルとして 'CustomerList'を参照していますか?たとえば、 '@model IList 'とします。あなたのコードに 'List 'の代わりに 'IList 'としてリストを宣言するべきです。 – Nope

+0

以下のコードを使用しました。 '@model CustomerDEMOForMultiselect.Models.Customer @ { レイアウト= null; } <!DOCTYPE HTML> DisplayCustomer

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

+0

私は読みやすく、あなたの質問にそのコードを追加しました:)へ – Nope

答えて

15

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

コントローラー:

 [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 
     } 

ビュー:

@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" /> 
} 

選択項目をバインドしてコントローラーに戻すために何か必要があります。

+0

おかげナタリーKellenbergerを、このラッパークラスを追加しますか?顧客モデル自体に? – bnil

+0

強く型付けされたビューを追加する必要はありますか?私は空のビューを作成しました。私は '@ Model.Customer'でエラーを出しています。エラーは 'System.Web.Mvc.MultiSelectList.MultiSelectList(System.Collections.IEnumerable、string、string、System.Collections.IEnumerable)'です。いくつかの無効な引数 – bnil

+0

ありがとう...それは動作します.. – bnil

関連する問題