2010-05-05 10 views
0

다른 구성 요소와 함께 구성 요소를 렌더링하려고합니다.다른 구성 요소의 ViewComponent 렌더링

public override void Render() 
// ... 
    var block = new Block(); 
    block.Init(EngineContext, Context); 
    block.Render(); 
// ... 
} 

문제는 차단 구성 요소가 템플릿을 찾을 수 없다는 것입니다.

ResourceProcessingException 메시지 : 자원 처리 할 수 ​​없습니다 '구성 요소 \ CustomReportComponentComponent \ default.vm': 자원이

내가 구성 요소가 제대로 초기화되지 않기 때문에, 다른 문제가 발생할 수 있습니다 추측

를 찾을 수 없습니다.

다른 구성 요소의 Render 메서드 내에서 구성 요소를 초기화 할 수 있습니까? 예를 들어 .vm에서 호출 한 것처럼 렌더링 할 수 있습니까?

+0

(또 다른 질문을 따를 필요합니다, 죄송합니다) Viewcomponent 인스턴스 초기화는 View Engines의 책임입니다. 즉, 뷰 구성 요소에서 다른 뷰를 호출하는 것이 쉽지는 않지만 뷰에서 보면 다소 간단합니다. NV 내부 정보에 익숙하지 않습니다. AspView (그리고 아마도 brail)를 사용하면 이런 일이 가능해야합니다. –

답변

0

전화가 필요하다고 생각합니다 .Init는 새로운 IViewComponentContext입니다.

component.Init(EngineContext, newViewComponentContext); 

이제 IViewComponentContext의 구현은 다양한 뷰 엔진 내에 있습니다. 문제는 - NVelocity의 내부 구조에 익숙하지 않아서 NV로 수행하는 방법에 대해 확신 할 수 없기 때문에 후속 질문이 필요합니다.

가능한 해결 방법 : 매개 변수로 뷰에 전달되는 구성 요소를 호출하는 공유보기 템플리트를 가질 수 있습니다. 이 같은 보일 것 AspView에서

: #blockcomponent에 대한 매개 변수를 얻을 수 있습니다 NV 가정이 접근 방식은 이론적으로 작동합니다

// in the calling component 
PropertyBag["componentName"] = "theOtherComponent"; 
PropertyBag["componentParams"] = new Hashtable{{age,30},{name,"Ken"}}; 
var componentOutput = RenderViewInPlace("/shared/render_component"); 


// in render_component.aspx 
<% InvokeViewComponent(Properties["componentName"], Properties["componentParams"], null, null); %> 

을, -

관련 문제