2012-01-16 2 views
1

나는 ContentPart를 사용하여 만든 간단한 위젯을 가지고 있습니다. ContentPart에는 적절한 드라이버가 있으며 위젯은 내 오차드 사이트의 어느 곳에 나 배치 할 수 있으며 모든 것이 훌륭하게 작동합니다! 위젯은 사용자로부터 일부 데이터를 캡처하여 유효성을 검사하고 처리 한 다음 위젯에 성공 응답을 표시해야합니다.Orchard CMS의 위젯 템플릿 무시

이 작업을 수행하려면 모델을 처리하고 유효하지 않은 경우 동일한 MyForm보기를 반환하거나 유효한 경우 FormSuccess보기를 반환하는 POST 요청을 받아들이는 컨트롤러를 정의했습니다. Widget Part 템플릿은 @Html.Partial("MyForm")을 사용하여 div가 POST 응답으로 포함되어 업데이트되는 Ajax 양식이 포함 된 MyForm보기를 표시합니다. 컨트롤러는 데이터에 따라 MyForm보기 또는 FormSuccess보기를 반환합니다.

내 디자이너는 MyForm 뷰와 FormSuccess 뷰의 부분 뷰를 재정의해야 할 필요가 있지만 부분 뷰 템플릿이 아닌 파트 표시 템플릿을 쉽게 재정의 할 수 있습니다.

내가 지금 @Html.Partial("MyForm")을 사용하고 있기 때문에 이것이 가능하지 않은 이유라고 생각합니다. 나는 @Display(New.MyForm())을 대신 사용하면 현재 테마의 Views 폴더에 MyForm.cshtml이라는 파일을 작성하여 MyForm보기를 덮어 쓸 수 있음을 발견했습니다. 이것이 정확히 필요한 것은 무엇입니까? 그러나 어떻게해야합니까? @Display 컨트롤러 동작에서?

현재로서는 return this.PartialView("MyForm", model) 또는 return this.PartialView("FormSuccess")을 사용하고 있으며 원래의보기를 사용하지만 재정의 된보기는 사용하지 않습니다. ShapeResult가 있음을 알았지 만 이것이 올바른 일이고 동적 생성자 매개 변수를 생성하는 방법을 모르는지 확실하지 않습니다. 또한 이상적으로 모델을 동적 때 LabelFor, TextboxFor 및 ValidationMessageFor HtmlHelper 메서드를 사용할 수 있도록 강력한 형식의 모델을 MyForm보기가 필요합니까?

누구나 전에 이런 식으로 한 적이 있습니까? 아니면 누구에게도 안내를 제공 할 수 있습니까?

덕분에, 제이슨

답변

0

제 모듈이 컴파일되는 방식을 변경하여이 작업을 처리 할 수있었습니다! 나는 이것이 어떻게 효과가 있었는지 완전히 이해하지 못했다.

처음에는 현재 테마의보기 폴더에 같은 이름의 파일을 만들어서 부분보기를 재정의하려고 시도했지만 아무 것도하지 않았고 그 이후로 다른 방식을 시도해 왔습니다.

내가 찾은 것은 모듈을 동적으로 컴파일하면 테마 폴더의 부분 뷰가 내 모듈의 관련 뷰보다 우선합니다. 이전에는 모듈을 디버그하려고했기 때문에 참조 된 모듈 로더를 사용하고있었습니다.이 모듈로 달성 할 수있는 유일한 방법이었습니다.

모듈이 동적으로 컴파일 될 때 내 모듈의보기가 테마의 재정의 된보기에 매핑되는 것처럼 보입니다!

여기 모듈로드를 설명하는 좋은 link이 있습니다.

0

당신이 이런 식으로 뭔가를 시도?

public ActionResult YourAction(){ 
    //where yourContent is a your widget content 
    //and _contentManager is IContentManager 
    dynamic model = _contentManager.BuildDisplay(yourContent); 
    return View((object)model); 
}