2013-05-31 106 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() 

插入後。