2015-05-14 145 views
-5

模型間每個環:對於提交形式

public class Room 
    { 
     public int Id { get; set; } 
     public string NumberRoom { get; set; } 
     public double CostPerNight { get; set; } 
     public virtual Category Category { get; set; } 
} 

我的視圖模型代碼

public class RoomModel 
    { 
     public IList<Room> Rooms { get; set; } 
    } 

我的剃刀代碼:

@model hotel.Models.RoomModel 

@using (Html.BeginForm("ComfortLevelView", "Category")) 
     { 
      for (int i = 0; i < Model.Rooms.Count(); i++) 
      { 
        <table class="simple-little-table" cellspacing='0'> 
         <tr> 
          <td>@Html.DisplayFor(m => Model.Rooms[i].NumberRoom) </td> 
          <td>@Html.DisplayFor(m => Model.Rooms[i].Categoryid)</td> 
          <td>@Html.DisplayFor(m => Model.Rooms[i].NumberOfSeats) </td> 
          <td> 
           @{ var result = Model.Rooms[i].CostPerNight * numberNights; } 
           <p>@ViewBag.NumberNights ночей</p>:@result 
          </td> 
          <td> 
           <input type="submit" id="submit" value="Booking" /> 
          </td> 
         </tr> 
        </table> 
       </div> 
      } 
     } 

控制器:

public ActionResult ComfortLevelView(int NumberNights, int CategoryId, int NumberPeoples ,DateTime SelectedDate) 
     { 
      IRoomService roomService = new RoomService();; 
      return View(roomService.GetRoomsByCategory(CategoryId, SelectedDate, NumberNights, NumberPeoples)); 
     } 

[HttpPost] 
public ActionResult ComfortLevelView(RoomModel model) 
{ 
    // 
} 

傳入字典的模型項目類型爲'System.Data.Entity.Infrastructure.DbQuery`1 [Hotel.BusinessObject.Room]',但此字典需要一個類型爲'hotel.Models.RoomModel'的模型項目。

+3

您還沒有解決您最後一個問題中的任何多個錯誤!你的查詢生成一個'Room'對象的集合,而不是'RoomModel'對象! –

+0

那也不是for-each循環,它只是一個for循環 –

+0

最後一個問題有很多幫助,這是毫無意義的! – nik0lias

回答

1

錯誤消息是不言自明的。你在你看來

@model hotel.Models.RoomModel 

有這一點,但你傳遞的System.Data.Entity.Infrastructure.DbQuery<Hotel.BusinessObject.Room>一個實例到你的觀點,因爲在你的控制器這行代碼的

return View(roomService.GetRoomsByCategory(CategoryId, SelectedDate, NumberNights, NumberPeoples)); 

你需要傳遞的RoomModel的實例,而不是System.Data.Entity.Infrastructure.DbQuery<Hotel.BusinessObject.Room> 。我會建議將您的控制器代碼更改爲以下版本

public ActionResult ComfortLevelView(int NumberNights, int CategoryId, int NumberPeoples, DateTime SelectedDate) 
{ 
    IRoomService roomService = new RoomService(); 
    var rooms = roomService.GetRoomsByCategory(CategoryId, SelectedDate, NumberNights, NumberPeoples); 

    RoomModel model = new RoomModel(); 
    model.Rooms = rooms.ToList(); 

    return View(model); 
} 
+0

是的!它非常幫助我!但公共ActionResult ComfortLevelView(RoomModel模型)//模型仍然爲空( – Alex

+0

你沒有說關於model中的模型爲null,並且你已經接受了我的答案,如果你還有其他問題,那麼你需要[提出一個新問題](http://stackoverflow.com/questions/ask) – ekad

+1

@亞歷山大,回到你最後的問題,並閱讀我的評論。沒有什麼可以回發到你的方法,因爲沒有什麼可以回發.'@Html.DisplayFor ()'不生成窗體控件。 –