2013-05-31 3 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', можете ли вы также добавить сведения о viewEditRoomViewModel viewModel. Думаю, тогда тебе помогут. –

+0

Я обновил свой новый код, и все еще ошибка. вы можете объяснить мне, почему я получаю ошибку? \ –

+0

Не могли бы вы отправить метод _roomTypeService.showNewRooms()? Правильно ли этот метод заполняет RoomTypeId? – Ryba

ответ

0

При вставке RoomtypeId в базе данных, вы используете метод ExecuteNonQuery(), он всегда возвращает 1 при вставке новой записи в нем, При использовании хранимой процедуры для вставки, вы можете использовать

select Scope_identity() 

после ввода.

Смежные вопросы