对于提交形式

问题描述:

模型间每个环:对于提交形式

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

错误消息是不言自明的。你在你看来

@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 ()'不生成窗体控件。 –