2012-10-08 5 views
1

을 사용하여 여러 번보기에 데이터를 전달하는 것일 수 있습니다.이 질문은 반복적으로 여기에서 반복적으로 나타나지만 답변을 찾을 수 없습니다.mvc 3 및 EF

내 프로젝트는 호텔 예약에 대한 것입니다. 나는 예약 클래스를 가지고있다. 마녀는 ChoosenRooms의 Icollection을 가지고 있으며, 예약을하는 사용자와 날짜와 다른 것들을 나타내는 클래스를 가지고있다.

처음보기에서

내가 선택한 객실, 날짜, 등, 그럼 난 내 두 번째보기에 미안은 사용자 정보를 얻기 위해가는 곳 되었 얻을하고 내가 가진 :

과정은 이것이다 사용자가 마침내 버튼을 클릭하여 데이터를 저장할 수 있도록 모든 수집 된 정보를 표시하려는 세 번째보기.

제 문제는 이러한 모든보기에서 예약 개체 클래스를 전달해야한다는 것입니다. 내 테스트에서 나는 기본 형식이 잘 전달하지만 ChoosingRooms의 iColletion 내가보기에서 다음 컨트롤러 작업에 다시 게시하면 손실됩니다 참조하십시오.

누군가가 다른 클래스의 예약 내에서 ChoosenRooms와 같은 복잡한 유형의 컨트롤러에서보기로 다시 게시하는 방법을 게시 할 수 있습니까?

왜이 정보가 손실되었는지 설명하십시오.

코드 : 다시 여기에서 게시

public class Reserva 
{ 
    public virtual int ID { get; set; } 

    [NotMapped] 
    public string[] q { get; set; } 

    [Display(Name = "Cliente")] 
    public virtual Utilizador utilizador { get; set; } 

    [Display(Name = "Quarto")] 
    public virtual ICollection<Quartos> ChoosenRooms{ get; set; } 

    [Display(Name = "Serviços Adicionais")] 
    public virtual ICollection<ReservasItens> itens { get; set; } 

보기는

@model SolarDeOura.Models.Reserva 
    @{ 
     ViewBag.Title = "AddReservaUser"; 
     var _reserva = TempData["reserva"] as Reserva; 
    } 

    <h2>AddReservaUser</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Reserva</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.dtEntrada) 
     </div> 
     <div class="editor-field"> 
      @Html.DisplayFor(model => model.dtEntrada) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.dtSaida) 
     </div> 
     <div class="editor-field"> 
      @Html.DisplayFor(model => model.dtSaida) 
     </div> 
     <div class="editor-label"> 
      @Model.q.Count() Choosen Rooms 
     </div> 

     @foreach (var q in Model.ChoosenRooms) 
     { 
      <ul> 
       <li> 
        @Html.DisplayFor(modelitem => q.descricao) 
       </li> 
      </ul> 
     } 

문제입니다. 이보기에서 "@foreach (Model.ChoosenRooms의 var q)"데이터는 있지만 데이터를 다시 게시하면 손실됩니다.

+0

[단일 페이지 응용 프로그램] (http://www.asp.net/single-page-application/an-introduction-to-spa/overview/landingpage) (SPA)으로 전환 할 수 있습니까? MVC4? –

+0

예제가 명확하지 않습니다. 첫 번째 _reserva 변수가 전혀 사용되지 않습니다. 2nd는 EditorFor가 아닌 DisplayFor를 사용하고 있습니다. 마지막으로 "modelitem"과 "q"를 바꿔 치기 만하면, 적절한 요소를 생성하는지 확신 할 수 없습니다. 페이지의 HTML 마크 업으로 보았습니다. 그리고 컨트롤러 동작은 어떻게 생겼습니까? – Nenad

답변

1

이 시점에서 모델 바인더의 개념은 분명하지 않았으며이 주제에 대한 지식은이 질문을 해결하는 데 모두 필요합니다. 이력서

: 클래스 [의 RESERVA 또한 복합 형이다 ChoosenRooms]의 모음을 갖는다 :

보기는 복잡한 유형 인 모델을 얻는다.

라인 @Html.DisplayFor(modelitem => q.descricao)은 데이터를 표시하는 데 필요한 html 요소를 렌더링하지만 컨트롤러 (입력 요소 또는 숨김 필드)에 다시 게시하여 필요한 모델 바인더가 실패하지 않도록 렌더링합니다.

또한 컨트롤러 (게시) 작업 인수에는 해당 필드와 일치하는 속성 이름이 없었습니다.이 경우 해당 값 모음이므로 String[] 형식이어야합니다.

디스플레이 템플릿 및 편집기 템플릿에 대해서도 읽는 것이 좋습니다.

관련 문제