ListViewByQuery 웹 파트 확장이 "작업 중..."에서 멈췄습니다.
-
10-12-2019 - |
문제
나는 ListViewByQuery
사용자 지정 웹 파트에서.CAML을 설정하면 GroupBy
에게 <GroupBy Collapse='FALSE'>
(즉.확장됨) 웹파트가 제대로 작동합니다.그러나 내가 설정하면 <GroupBy Collapse='TRUE'>
, 항목이 확장되지만 "작업 중..." 메시지가 표시되면서 멈춥니다.
(SharePoint 2010의 이전 메시지는 "로드 중..."이었던 것 같습니다.)
사전 확장된 작업 복사본은 다음과 같습니다.
이는 JavaScript 문제가 아닌 것 같습니다(여러 브라우저에서 테스트됨).
이 문제를 어떻게 해결합니까?
곁에:Karine은 다음을 사용하여 자신의 블로그에서 매우 유사한 문제를 언급합니다. ListViewByQuery
웹 파트 여기.제안된 JavaScript 수정 사항을 테스트하고 다시 보고하겠지만 이는 단지 해결 방법일 뿐이라고 생각합니다. 근본적인 원인과 해결책은 무엇입니까?
업데이트:JS 수정 프로그램이 작동하지 않습니다.동적으로 생성 중입니다. ListViewByQuery
내 사용자 지정 웹 파트에서 제어하고(필요한 것처럼 보임) JS가 실행되는 것처럼 보이지만 디버깅 방법을 결정할 수 없습니다.
업데이트 2:마침내 JS 수정 사항이 작동하게 되었습니다. 축소가 두 번 호출되었습니다(그래서 jsut가 다시 확장됩니다).곧 가능한 답변으로 제안할 예정이지만 실제 답변으로 받아들이지는 않습니다.
해결책
이것이 바로 JavaScript 수정/kludge가 작동하는 방법입니다.먼저, 미리 확장해야 합니다. ListViewByQuery
CAML 그룹(Collapse='FALSE'
).둘째, 제안된 JavaScript는 두 번 실행되고 단순히 결과가 축소/확장되므로 2013에서는 작동하지 않는 것 같습니다.제가 작업한 방법은 다음과 같습니다.
나는 ListViewByQuery
동적으로 제어합니다(doco에서 필요/권장).
Panel pnlDiv = new Panel();
pnlDiv.ID = "pnlDiv";
pnlDiv.CssClass = "ms-authoringcontrols";
ListViewByQuery lvPdfs = new ListViewByQuery();
..
EnsureChildControls();
pnlDiv.Controls.Add(lvPdfs);
pnlDiv.RenderControl(writer);
RenderChildren(writer);
JavaScript에 문제가 있어서 서버 측에서 내보냈습니다.
private void RegisterExpandJavascriptFix()
{
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered(this.GetType(), "CollapseFunc"))
{
cs.RegisterClientScriptBlock(this.GetType(), "CollapseFunc", JSExpandFix, true);
}
if (!cs.IsStartupScriptRegistered(this.GetType(), "Collapse"))
{
cs.RegisterStartupScript(this.GetType(), "CollapseFunc", "collapseDiv();", true);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
RegisterExpandJavascriptFix();
}
}
JavaScript는 다음과 같습니다.
private const string JSExpandFix = @"function collapseDiv() {
var div = document.getElementById('pnlDiv');
//alert(div);
if (div != null) {
var links = div.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
if (links[i].href == 'javascript:' && links[i].onclick.toString().indexOf('ExpCollGroup') > -1 && links[i].previousSibling.tagName == 'IMG') {
//alert(links[i].onclick.toString());
links[i].click();
}
}
}
}";
참고하세요 links[i].previousSibling.tagName == 'IMG')
확인 - 이것은 단지 클릭만 되는지 확인하는 방법입니다. 첫 번째 링크 접기(예:텍스트가 아닌 플러스/마이너스 이미지).