소비자 웹 파트가 제공자 웹 파트의 변경 사항에 응답하지 않습니다.
-
10-12-2019 - |
문제
현재 연결된 3 개의 웹 파트를 사용하고 있습니다 (웹 파트 A에 연결된 B, B에 연결된 B에 연결됨). B와 C. WebPart B 간의 연결에 문제가 없으며 공급자와 소비자이며 일부 변수가있는 Dropbox 만 포함합니다. 이 Dropbox의 SelectedItem은 제공된 값입니다. 이것은 WebPart B에서 사용중인 코드의 ConnectionProvider입니다.
[ConnectionProvider("DropboxValue", "dbv")]
public IDropBoxValue provider()
{
return this;
}
.
이것은 WebPart C에서 사용중인 ConnectionConsumer입니다.
[ConnectionConsumer("DropboxValue", "dbv")]
public void consumer(IDropBoxValue providerInterface)
{
_provider = providerInterface;
}
.
페이지의 첫 번째로드에서 DropboxValue가 자동으로 선택되고 WebPart C는이 변수를 사용하여 데이터가있는 SPGridView를 만듭니다. 이제 Dropbox WebPart C에서 새 항목을 선택 하여이 변수를 변경하면 해당 Dropbox WebPart C가 응답하지 않습니다. 실제로 디버그에서 프로젝트를 실행하면 웹 페이지에서 호출되지 않습니다.
왜 WebPart C가 WebPart B의 변경 사항에 응답하지 않는 이유는 무엇입니까?
추가 편집
WebPart B에서 SelectedValue를 변경할 때마다 "Provider 웹 파트가 연결되지 않은"텍스트가 변경됩니다. 이 오류는 나에 의해 만들어지며 때 던져집니다.
.
if (_Provider == null)
_Provider는 웹 파트의 인터페이스입니다.
해결책
CASECHILDCONTROLS 및 OnPrender 함수를 사용하는 경우에 오류가 있습니다.onPRerender 함수에서 호출되어야하는 동안 createchildControls에서 공급자를 호출했습니다.
createChildControls에서 다른 WebPart를 호출하면 해당 웹 파트의 createchildControls가 시작되지 않은 것일 수 있습니다.OnPRerender가 호출되면 모든 WebParts의 모든 CreateChildControl 함수가 호출되었습니다.따라서 OnPrelerender가 호출되는 시점에서 현재 페이지의 모든 웹 파트가 나타납니다.