2016-04-12 16 views
1

このシステムは映画レンタルを管理するためのシステムです。ユーザーは顧客の管理、ムービーの管理の追加、レンタルの管理ができます。ここでASP.net MVC - ドロップダウンリストの使用

は私のモデルです:

お客様モデル

namespace u1265196_MovieRentals.Models 
{ 
    public class Customers 
    { 


     [Display(Name = "Customer ID")] 
     [Key] 
     public int CustomerID { get; set; } 
     [Required] 
     [Display(Name = "First Name")] 
     public string FirstName { get; set; } 
     [Required] 
     [Display(Name = "Last Name")] 
     public string LastName { get; set; } 
     [Required] 
     [Display(Name = "Address Line 1")] 
     public string AddressLine1 { get; set; } 
     [Required] 
     [Display(Name = "Address Line 2")] 
     public string AddressLine2 { get; set; } 
     [Required] 
     [Display(Name = "City")] 
     public string City { get; set; } 
     [Required] 
     [Display(Name = "Postcode")] 
     public string Postcode { get; set; } 
     [Required] 
     [Display(Name = "Phone No")] 
     public string Phone { get; set; } 

     public virtual ICollection<Rentals> Rentals { get; set; } 

    } 

} 

作品モデル:

namespace u1265196_MovieRentals.Models 
{ 
    public class Movies 
    { 
     public int MovieID { get; set; } 
     [Required] 
     public string Title { get; set; } 
     [Required] 
     public string Director { get; set; } 
     [Required] 
     public string Genre { get; set; } 
     [Required] 
     [Display(Name = "Length of film")] 
     public string Length { get; set; } 
     [Required] 
     public int AgeRating { get; set; } 

     public virtual ICollection<Rentals> Rentals { get; set; } 
    } 
} 

レンタルモデル:私のレンタルで

namespace u1265196_MovieRentals.Models 
{ 
    public class Rentals 
    { 
     [Key] 
     public int RentalID { get; set; } 

     public int CustomerID { get; set; } 
     public int MovieID { get; set; } 
     public System.DateTime DateRented { get; set; } 
     public System.DateTime ReturnDate { get; set; } 

     [ForeignKey("CustomerID")] 
     public virtual Customers Customers { get; set; } 

     [ForeignKey("MovieID")] 
     public virtual Movies Movies { get; set; } 
    } 
} 

は私が表示したい見ますドロップダウン顧客名+姓のすべてを含むリスト。私はまた、すべての映画タイトルを含むドロップダウンリストを表示したい。

ユーザーがドロップダウンリストから顧客とムービーを選択して保存をクリックすると、選択した顧客の関連IDと選択したムービーをレンタルテーブルに保存します。

これはどうやって行うのですか?

EDITここ

は私のRentalsController内AddRentalためのコードは次のとおりです。ここで

// GET: Rentals/Create 


     public ActionResult AddRental() 
     { 

      var vm = new RentMovieVm(); 
      vm.Customers = CustomerDataAccess.GetAllCustomers().Select(s => new SelectListItem { Value = s.Id.ToString(), Text = s.FirstName + " " + s.LastName }).ToList(); 
      vm.Movies = MoviesDataAccess.GetAllMovies().Select(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Title }).ToList(); 
      return View(vm); 
     } 

     // POST: Rentals/Create 

     [HttpPost] 
     public ActionResult AddRental(RentMovieVm model) 
     { 
      var movieID = model.MovieID; 
      var customerID = model.CustomerID; 


      try 
      { 
       if (ModelState.IsValid) 
       { 
        RentalsDataAccess RentalsDA = new RentalsDataAccess(); 

        if (RentalsDA.AddRental(model)) 
        { 
         ViewBag.Message = "Rental added successfully"; 
        } 
       } 
       return View(); 
      } 
      catch 

      { 
       return View(); 

      } 
     } 

は私のRentalsDataAccessクラス内のコードAddRentalです:

public bool AddRental(RentMovieVm obj) 
     { 

      connection(); 
      SqlCommand com = new SqlCommand("AddNewRental", con); 
      com.CommandType = CommandType.StoredProcedure; 
      com.Parameters.AddWithValue("@CustomerID", obj.CustomerID); 
      com.Parameters.AddWithValue("@MovieID", obj.MovieID); 



      con.Open(); 
      int i = com.ExecuteNonQuery(); 
      con.Close(); 
      if (i >= 1) 
      { 

       return true; 

      } 
      else 
      { 

       return false; 
      } 


     } 

EDIT2

CustomersDataAccess:

public List<Customers> GetAllCustomers() 


     { 
      connection(); 
      List<Customers> CustomerList = new List<Customers>(); 


      SqlCommand com = new SqlCommand("GetCustomers", con); 
      com.CommandType = CommandType.StoredProcedure; 
      SqlDataAdapter da = new SqlDataAdapter(com); 
      DataTable dt = new DataTable(); 

      con.Open(); 
      da.Fill(dt); 
      con.Close(); 
      foreach (DataRow dr in dt.Rows) 
      { 

       CustomerList.Add(

        new Customers 
        { 

         CustomerID = Convert.ToInt32(dr["CustomerID"]), 
         FirstName = Convert.ToString(dr["FirstName"]), 
         LastName = Convert.ToString(dr["LastName"]), 


        } 


        ); 

      } 

      return CustomerList; 


     } 
+0

あなたの質問は広すぎる可能性があります。何か試してみることはできますか? Razorには、ドロップダウンリストを使用する簡単な方法があります。チュートリアルをお探しの場合、これは適切な場所ではないかもしれません。 –

答えて

1

は、このビューに固有のビューモデルを作成します。

public class RentMovieVm 
{ 
    public List<SelectListItem> Customers { set; get;} 
    public List<SelectListItem> Movies { set; get;} 

    public int CustomerId { set; get;} 
    public int MovieId { set; get;} 
} 

は、今すぐあなたのGETアクションで、このオブジェクトを作成してテーブルからデータを CustomersMoviesプロパティを移入します。

public ActionResult Rent() 
{ 
    var vm = new RentMovieVm(); 
    vm.Customers= dbContext.Customers.Select(s=> new SelectListItem { 
              Value =s.CustomerId.ToString(), 
              Text= s.FirstName+" "+ s.LastName }).ToList(); 
    vm.Movies= dbContext.Movies.Select(x=> new SelectListItem { 
               Value =x.MovieId.ToString(), 
               Text= x.Title }).ToList(); 
    return View(vm); 
} 

今、あなたのビューが強くおHttpPostアクションメソッドでは今、このビューモデル

@model RentMovieVm 
@using(Html.Beginform()) 
{ 
    <label> Select a customer </label> 
    @Html.DropDownListFor(s=>s.CustomerId, Model.Customers) 
    <label> Select a movie </label> 
    @Html.DropDownListFor(s=>s.MovieId, Model.Movies) 

    <input type="submit" /> 
} 

に型付けされるモデルバインダーをマッピングすることができるようになりますので、あなたはパラメータと同じRentMovieVmクラスを使用することができますポストされたフォームデータをこのクラスのオブジェクトのプロパティに追加します。

[HttpPost] 
public ActionResult Rent(RentMovieVm model) 
{ 
    var movieId = model.MovieId; 
    var customerId = model.CustomreId; 
    // to do : Save this to your Rental Table 
    // to do : Return something (redirect to success page) 
} 
+0

こんにちは、ご意見ありがとうございます。これはEntity Frameworkを使用する場合にのみ機能しますか?私はエンティティフレームワークを使用していません。これまでは、ストアドプロシージャを使用してムービーと顧客を作成、編集、および削除してきました。 – JamesM94

+0

いいえ。ドロップダウンの基本的な考え方は同じです。EFを使用していない場合は、 'dbContext.Customers'を使用する代わりに' Rent() 'GETアクションメソッドを更新して、他のデータアクセスメソッドからデータを取得してください。例: 'yourDataAccessClass.GetCustomers()。Select(// existing code)' 'GetCustomers'が' Customer'のコレクションを返します。 – Shyju

+0

ありがとうございます。私はまだエラーが発生しています。上記の私のRentalsDataAccessClassと私のRentalsControllerを追加しました。見てみて、どこが間違っているかも教えてください。ありがとう – JamesM94