2013-05-31 109 views
1

我尝试创建新房间,但roomTypeID总是返回1,我的代码有什么问题? 我可以做一个新的房间类型,但我不能插入房间设施在我的数据库,因为RoomType ID始终返回1错误,从控制器获取价值

这是我的代码..

我控制器

public ActionResult NewRoom() 
     { 
      ViewBag.hotel = _hotelService.GetByID(_HotelID).HotelName; 
      List<ShowEditRoomViewModel> showEditRoomViewModel = _roomTypeService.showNewRooms(); 
      return View(showEditRoomViewModel.FirstOrDefault()); 
     } 

     [HttpPost] 
     public ActionResult NewRoom(FormCollection typeRoom) 
     { 
      _roomTypeService.NewRoom(_HotelID, typeRoom["RoomTypeName"], typeRoom["RoomTypeDescription"]); 
      List<string> IDs = typeRoom["FacilityIDs"].Split(',').ToList(); 

      List<int> FacilityIDs = new List<int>(); 

      foreach (string ID in IDs) 
      { 
       FacilityIDs.Add(Convert.ToInt32(ID)); 
      } 

      _roomTypeService.UpdateFacilityInRooms(FacilityIDs, Convert.ToInt32(typeRoom["RoomTypeID"])); 
      return NewRoom(); 

     } 

我的服务

public void UpdateFacilityInRooms(List<int> FacilityIDs, int RoomTypeID) 
     { 
      List<HotelRoomFacility> hotelRoomFacilities = _HotelRoomFacilityRopository.AsQueryable().Where(f => f.RoomTypeID == RoomTypeID).ToList(); 
      foreach (int newRoomFacility in FacilityIDs) 
      { 
       if (hotelRoomFacilities.Where(h => h.RoomFacilityID == newRoomFacility).Count() == 0) 
       { 
        HotelRoomFacility facility = new HotelRoomFacility 
        { 
         RoomFacilityID = newRoomFacility, 
         RoomTypeID = RoomTypeID 
        }; 
        _HotelRoomFacilityRopository.Add(facility); 
       } 
      } 
      _HotelRoomFacilityRopository.CommitChanges(); 
     } 

我的视图模型

public class ShowEditRoomViewModel 
    { 
     public int RoomTypeID { get; set; } 
     public string RoomTypeName { get; set; } 
     public string RoomTypeDescription { get; set; } 

     public List<FaciliyInRoom> facilityinRoom { get; set; } 
    } 

我看来

@model XNet.Repository.Model.ShowEditRoomViewModel 

@{ 
    ViewBag.Title = "NewRoom"; 
} 

<h2>New Room</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Isikan Data</legend> 
     <div> 
      @Html.Label("Hotel Name") 
     </div> 
     <div> 
      @ViewBag.hotel 
     </div> 
     <br /> 

     <div> 
      @Html.HiddenFor(model => model.RoomTypeID) 
     </div> 
     <br /> 


     <div> 
      @Html.Label("Room Type Name") 
     </div> 
     <div> 
      @Html.EditorFor(model => model.RoomTypeName) 
      @Html.ValidationMessageFor(model => model.RoomTypeName) 
     </div> 
     <br /> 

     <div> 
      @Html.Label("Room Type Description") 
     </div> 
     <div> 
      @Html.TextAreaFor(model => model.RoomTypeDescription) 
      @Html.ValidationMessageFor(model => model.RoomTypeDescription) 
     </div> 
     <br /> 

     <table> 
     <thead> 
      <tr> 
       <th>Facility Name</th> 
       <th> is available</th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (var facility in Model.facilitiesInRoom) 
      { 
       <tr> 
        <td> 
         @(facility.RoomFacilityName) 
        </td> 
        <td style="text-align:center;"> 
         <input type="checkbox" @(facility.RoomFacilityAvailable ? " checked=checked" : null) name="FacilityIDs" value="@facility.RoomFacilityID" /> 

        </td> 
       </tr> 
      } 
     </tbody> 
    </table>  

<br /> 


     <p> 
      <input type="submit" value="Save" /> 
      <input style="width:100px;" type="button" title="EditHotelDetail" value="Back to Detail" onclick="location.href='@Url.Action("Room", "Hotel") '" /> 
     </p> 
    </fieldset> 
} 

我的方法

public List<ShowEditRoomViewModel> showNewRooms() 
     { 
      List<RoomType> roomTypes = (from d in _RoomTypeRepository.All() 
             select d).ToList(); 

      List<ShowEditRoomViewModel> showEditRoomViewModel = new List<ShowEditRoomViewModel>(); 

      foreach (RoomType roomType in roomTypes) 
      { 
       showEditRoomViewModel.Add(new ShowEditRoomViewModel 
       { 
        RoomTypeID = roomType.RoomTypeID, 
        facilitiesInRoom = LoadFacilityInRoom() 
       }); 
      } 
      return showEditRoomViewModel; 
     } 

可有人告诉我,这里是我的错? 感谢

+0

您使用的视图引用了'ShowEditRoomViewModel',并且您只向我们展示了'ShowNewRoomViewModel',您还可以添加ShowEditRoomViewModel viewModel的详细信息。那么我认为,你将能够得到帮助。 –

+0

我更新了我的新代码,但仍然错误。你能解释我,为什么我得到错误吗?\ –

+0

你可以发布_roomTypeService.showNewRooms()方法吗? 该方法是否正确填充RoomTypeId? – Ryba

回答

0

当你在数据库中插入RoomtypeId,您使用的ExecuteNonQuery()方法,如果使用存储过程将它总是返回1,只要你在其中插入一个新的记录, ,您可以使用

select Scope_identity() 

插入后。