2016-04-03 27 views
0

nasıl yapılacağını bir türlü düşünemiyorum Olası bir lokantada ve rezervasyonlarda bir restoranım var. "Sadece seçilen restoran rezervasyonlarını gösterme" sorununu nasıl çözeceğimizi düşünün.MVC - sadece "rezervasyonları göster" 'i göster -

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

BaşlangıçTarihi ve bitiştarihi bir denetleyici gelen: My Index.cshtml şu anda aşağıdaki gösteriyor

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

Beynim, şu anda her yerde olamaz gitmiyor "Seçilmiş" restoranın rezervasyonlarını nasıl görüntüleyeceğimizi düşünün.

Nereden başlayacağınız konusunda herhangi bir öneri, fikir var mı? senin BookingListView yılında

+0

Dizin görünümünde bu görüntüler ister misiniz? Tarihe göre filtre kurulumu burada en az –

+0

MuyiwaOlu-Ogunleye @ Evet, küçük bir "test" programı, bu yüzden şu anda bu rezervasyonlara dizin sayfasına gidin. – user3382830

cevap

0

gibi seçilmiş adlı bir özellik içerir: o zaman

public int Selected {get; set;} 

Ve senin görünümünde, aşağıdaki DropDownListFor değiştirin: Kumandanızda olarak

@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 mülkiyet Seçilen Resturaunt'ın kimliğini öyle göstermelidir (endDateLimit ve view.restaurants bildiriminden sonra notu not edin.):

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

Önceki kodunuzun çalışmadığı nedeni, DropdownListFor öğesinin seçili öğenin değerini ilk parametreye eklemesidir, bu nedenle, aslında seçilen kimliğin koleksiyonun sayımına atanmış olsaydı (sayım bir yöntemdir). Düzeltme, bunu, düzeltme modelinin, istenildiği zaman alınabilmesine izin veren bir Özellik Modeline atamasını sağlar. Üste |

0

İşte bir şey. Şimdi sayfaya bakacak olursak - sadece ..

  1. Seçtiğim restoran kimliği.
  2. Yine de tüm rezervasyonlarınızı gösteren rezervasyonlar restorana göre filtrelenmiyor. Bir şey mi eksik?
şimdi sabit bu bir var

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.


.

benim Endeksinde sorguya bir LINQ ekledik:

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

ve BookingListView olarak aşağıdaki var:

: bunun için DropDownList olarak değiştirildi
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.

İlgili konular