ListViewByQuery Webパーツを拡張する「それに取り組んで...」
-
10-12-2019 - |
質問
カスタムWeb-PartでListViewByQuery
を使用しています。 CAML GroupBy
を<GroupBy Collapse='FALSE'>
(すなわち展開)に設定した場合、WebPartはうまく機能します。ただし、それを<GroupBy Collapse='TRUE'>
に設定すると、その項目は展開されますが、その後、「作業中」に起動/ハングします。メッセージ:
(SharePoint 2010の古いメッセージが「ロード中...」であると思います。
事前展開時の作業コピー:
これはJavaScriptの問題ではありません(複数のブラウザでテスト済み)。
どうすればいいですか?
脇章:Karineは、ListViewByQuery
Webパートここに。私は提案されたJavaScriptの修正と報告をテストします、しかし私はこれが回避策だけであると私は信じています - 基礎となる原因と解決策は何ですか?
解決
これは、JavaScript Fix / Kludgeの作業を行う方法です。まず、ListViewByQuery
Camlグループ(Collapse='FALSE'
)を事前に拡張する必要があります。第二に、推奨されるJavaScriptは2回実行され、単に結果を折りたたんで折りたたんで、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に問題があるため、IT Server-Side:
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();
}
}
}
}";
.
Note links[i].previousSibling.tagName == 'IMG')
チェック - これは、最初の折りたたみリンク(テキストではなくプラス/マイナスイメージ)をクリックするだけであることを確認するための私の方法です。