質問

カスタムWeb-PartでListViewByQueryを使用しています。 CAML GroupBy<GroupBy Collapse='FALSE'>(すなわち展開)に設定した場合、WebPartはうまく機能します。ただし、それを<GroupBy Collapse='TRUE'>に設定すると、その項目は展開されますが、その後、「作業中」に起動/ハングします。メッセージ:

ENTER IMENT Description

(SharePoint 2010の古いメッセージが「ロード中...」であると思います。

事前展開時の作業コピー:

画像の入力ここで

これはJavaScriptの問題ではありません(複数のブラウザでテスト済み)。

どうすればいいですか?


脇章:Karineは、ListViewByQuery Webパートここに。私は提案されたJavaScriptの修正と報告をテストします、しかし私はこれが回避策だけであると私は信じています - 基礎となる原因と解決策は何ですか?

Update:JS修正が働くことはできません。私は私のカスタムWebPartでListViewByQueryコントロールを動的に生成しています(一見必要なように)そしてJSが発砲しているように思われる間、それをデバッグする方法を決定することはできません。

Update 2:最後にJS修正作業を手に入れました - 崩壊は2回呼び出されていました(したがって、JSUTは再び拡大します)。これを可能な限りすぐに答えますが、実際の答えとして受け入れないでしょう。

役に立ちましたか?

解決

これは、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')チェック - これは、最初の折りたたみリンク(テキストではなくプラス/マイナスイメージ)をクリックするだけであることを確認するための私の方法です。

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top