2016-04-03 4 views
0

レストランと予約を作成する可能性のあるレストランがあり、特定の時間枠の予約を選択することはできますが、 「選ばれたレストランの予約を表示する」という問題を解決する方法を考えてください。MVC - 選択した「予約」のみを表示する方法がわからない

<div class="well"> 
    @using (Html.BeginForm("Index", "Booking", FormMethod.Get)) 
    { 
     <label for="StartDate">Display bookings for</label> 

      @Html.DropDownListFor(model => model.Restaurants.Count, Model.Restaurants.Select(r => new SelectListItem 
      { 
       Text = r.Name, 
       Value = r.Id.ToString(), 
       Selected = r.Id == Model.Restaurants.Count 

      })); 

     @Html.ValidationMessageFor(model => model.Restaurants) 

     <br/> 
     @Html.TextBox("StartDate", Model.StartDate.Value.ToShortDateString()) 
     <text>-</text> 
     @Html.TextBox("EndDate", Model.EndDate.Value.ToShortDateString()) 
     <input type="submit" value="Filter" class="btn btn-default"/> 
    } 
</div> 

開始日と終了日は、コントローラから来る:私のIndex.cshtmlは今、次の表示され

public ActionResult Index(BookingsListView view) 
     { 
      if (view.StartDate == null) 
       view.StartDate = DateTime.Now.Date; 
      if (view.EndDate == null) 
       view.EndDate = DateTime.Now.Date; 

      var endDateLimit = view.EndDate.Value.AddDays(1); 

      view.Bookings = from b in db.Bookings.Include("Restaurant") 
       where b.StartTime >= view.StartDate && b.StartTime < endDateLimit 
       select b; 

      view.Restaurants = dbRestaurant.Restaurants.OrderBy(r => r.Id).ToList(); 

      return View(view); 
     } 

私の脳は、今どこにもないことができないだろう「選ばれた」レストランの予約を表示する方法を考えてください。

どこから始めればいいですか?あなたのBookingListView

+0

これをインデックスビューに表示しますか? –

+0

@ MuyiwaOlu-Ogunleyeはい、現時点では小さな「テスト」プログラムなので、これらの予約はインデックスページに行きます。少なくとも日付によるフィルタがここに設定されています。 – user3382830

答えて

0

、同様に選択したというプロパティが含ま:

public int Selected {get; set;} 

そして、あなたのビューでは、次のようにDropDownListForを置き換える:

あなたのコントローラで
@Html.DropDownListFor(model => model.Selected, Model.Restaurants.Select(r => new SelectListItem 
     { 
      Text = r.Name, 
      Value = r.Id.ToString(), 
      Selected = r.Id == Model.Restaurants.Count 

     })); 

Selectedプロパティを選択されたResturauntのIDを表す必要があります(endDateLimitのコメントとview.restaurantsの宣言に注意してください)。

public ActionResult Index(BookingsListView view) 
    { 
     if (view.StartDate == null) 
      view.StartDate = DateTime.Now.Date; 
     if (view.EndDate == null) 
      view.EndDate = DateTime.Now.Date; 

     var endDateLimit = view.EndDate.Value.AddDays(1); 

     // Use view.Selected to find the current selected resturant 
     if(view.Selected == 0) // nothing has been selected 
      view.Selected = 1 //ID of default resturant? 

     view.Bookings = from b in db.Bookings.Include("Restaurant") 
      where b.StartTime >= view.StartDate && b.StartTime < endDateLimit 
      select b; 

     // Only selected restuarants 

     view.Restaurants = dbRestaurant.Restaurants.Where(r => r.Id == view.Selected).OrderBy(r => r.Id).ToList(); 

     return View(view); 
    } 

DropdownListForは、選択した項目の値を最初のパラメータに追加するため、選択したIDを実際にコレクションの数に割り当てていたためですカウントは方法です)。

修正プログラムは、それを自由に検索できるようにするビューモデルのプロパティに割り当てます。

0

ここが問題です。今、私がページを見ると、私だけが見えます。

  1. 私が選んだレストランID。
  2. まだすべての予約を表示しているレストランで予約をフィルタリングしません。何か不足していますか?

I see only "the restaurant by ID" but I want to see all restaurants and filter the view to see only the bookings for the restaurant I chose.


私は今、固定、このいずれかを持っています。

は私が私のインデックスにクエリにLINQを追加しました:

//Choose restaurant by ID and show the bookings for it. 
      view.Bookings = from b in db.Bookings.Include("Restaurant") 
       where (view.RestaurantId == null || view.RestaurantId == b.Restaurant.Id) && 
         b.StartTime >= view.StartDate && b.StartTime < endDateLimit 
       select b; 

とBookingListViewで、次があります:

:それのためのDropDownListに変更されました
public int? RestaurantId { get; set; } 

@Html.DropDownListFor(model => model.RestaurantId, Model.Restaurants.Select(r => new SelectListItem 
      { 
       Text = r.Name, 
       Value = r.Id.ToString(), 
       Selected = r.Id == Model.Restaurants.Count 

      })); 

All done.

関連する問題