2014-07-17 3 views
2

콘텐츠 유형에는 날짜, 시간, 제목 및 서식있는 텍스트 설명이 포함 된 여러 지점으로 구성된 일정 목록을 추가 할 수있는 여러 부분이 있습니다. 즉, 1-n 관계입니다. 이 부분은보기 모델을 사용하여 객체 목록을 제출합니다. 사용자는 제출하기 전에 일정에 시간을 할애 할 수 있으며 다른 부분이 유효성을 확인하지 못하면 현재 일정에 대한 모든 작업이 느슨해 질 수 있습니다. 페이지를 다시로드 할 때 새로운보기 모델이 만들어지기 때문에 예기치 않은 현상이 아닙니다.Orchard는 드라이버의 뷰 모델을 지속합니다.

그러나 내가 도와 드릴 수는 없지만 부품의 정보가 계속 유지되며보기 모델에서 데이터를 유지할 수있는 방법이 있었으면합니다.

드라이버, 다음의 메소드가 있습니다

var model = new AgendaViewModel(); 
updater.TryUpdateModel(model, Prefix, null, null); 

에 편집기를로드 할 때 수행 할 수 있습니다 "유사한"있나요 :

protected override DriverResult Editor(AgendaPart part, dynamic shapeHelper) 
{ 
    return ContentShape("Parts_Agenda_Edit", 
     () => shapeHelper.EditorTemplate(
      TemplateName: "Parts/Agenda", 
      Model: BuildEditorViewModel(part), 
      Prefix: Prefix)); 
} 

protected override DriverResult Editor(AgendaPart part, IUpdateModel updater, dynamic shapeHelper) 
{ 
    var model = new AgendaViewModel(); 
    updater.TryUpdateModel(model, Prefix, null, null); 

    if (part.ContentItem.Id != 0) 
    { 
     _agendaService.CreateUpdateAgenda(model, part.ContentItem); 
    } 

    return Editor(part, shapeHelper); 
} 

이 같은 뷰 모델을 얻을 제출하는 경우 기존의 뷰 모델 데이터를 가져 오겠습니까? 그렇지 않다면 다른 제안도 환영합니다.

답변

3

ASP.NET MVC는 이러한 데이터를 요청간에 지속시키기위한 메커니즘 인 TempData를 제공합니다. 이 컨트롤러에서이 예를 볼 수 있습니다 : https://bitbucket.org/bleroy/nwazet.commerce/src/b558d7988c4f6c66cdd0b2dd6b533d8ad3bfbceb/Controllers/StripeController.cs?at=default

또한 TryUpdateModel이 지속 작업을 수행하지 않는다는 것을 분명히하고 싶습니다. 그것은 클라이언트가 제출 한 데이터 (일반적으로 폼 데이터)를 전달한 객체로 매핑한다는 것입니다. 파트 레코드는 오차드에 의해 자동으로 유지 될 수있는 변경 사항을 추적하는 것입니다.

+0

이 예제는 컨트롤러 용이고, ContentPartDriver에서 사용 가능한 TempDataDictionary가 있습니까? –

+0

필터에서 액세스 할 수 있습니다. 컨트롤러 자체의 속성이 필터 자체의 속성입니다. 그런 다음 드라이버에서 액세스 할 수있는 현재 요청의 항목 또는 레이아웃의 동적 속성에 해당 내용을 복사 할 수 있습니다. 세션은 작동 할 수있는 또 다른 유형의 저장소이며 현재 HTTP 컨텍스트를 통해 어디에서나 액세스 할 수 있습니다. –