2012-02-17 10 views
0

私のWebパーツ(SharePoint 2010)のjavascript関数でSP.UI.ModalDialog.showModalDialog()を呼び出していますが、ダイアログボックスが1秒間表示されてから閉じます。
元々、(レイアウトフォルダ内の)共有ページを呼びたいと思っていましたが、シンプルなダイアログでテストして、共有ページにエラーがないことを確認しています。SharePoint WebパーツでModalDialogを閉じることを防止できません

Webパーツでは、各最初のセル行がLinkBut​​tonであるテーブルがあります。私は、WebパーツASCXのスクリプトブロックで

linkButton.OnClientClick = string.Format("OpenNotationCurveDialog('{0}');", 
        notation.code); 

:私は、JavaScript関数を呼び出すようにOnClientClickを設定している

function OpenNotationCurveDialog(notationCode) { 

    var htmlElement = document.createElement('p'); 

    var helloWorldNode = document.createTextNode('Hello world!'); 
    htmlElement.appendChild(helloWorldNode); 

    var options = { 

     title: "Add item", 
     allowMaximize: true, 
     showClose: true, 
     width: 800, 
     height: 600, 
     html: htmlElement, 
     dialogReturnValueCallback: CurveDialog_ClosedCallback 

    }; 

    SP.UI.ModalDialog.showModalDialog(options); 

    return false; 
} 

function CurveDialog_ClosedCallback(result, value) { 
    console.log('!! CurveDialog_ClosedCallback !!'); 
} 

機能CurveDialog_ClosedCallbackが呼び出されることはありません。 同じWebパーツで、JavaScript関数SP.UI.ModalDialog.showModalDialog()を呼び出すWebパーツメニューに要素を追加しました。これは完全に機能しています。私はメニューからshowModalDialog()を呼び出し、LinkBut​​tonクライアントイベントから作業していないときに、なぜ動作しているのか分かりません。

どのようにこの非常に迷惑な行動を解決するためのアイデアですか? thx

答えて

1

おそらく、リンクボタンがポストバックを実行してページがリロードされ、ダイアログが消えることがあります。代わりに単純なアンカータグを使用してみてください。

+0

私は同じ考えを持っていました。単純なアンカータグでうまくいきました。あなたはaspコントロールを知っていますか?LinkBut​​tonを置き換えてクライアントイベントを設定できますか?ユーザーがasp:tableセルをクリックしたときにjavascript関数を呼び出す必要があります。 – Dino

+0

本当にサーバサイドで作業する必要がある場合は、アンカータグをrunat = "server"として宣言し、HtmlAnchor(http://msdn.microsoft.com/en-us/library/8ff86hxd(v)として動作させることができます= vs.71).aspx)。しかし、純粋にクライアント側で呼び出しを行い、jqueryなどを使用して接続を設定する方が簡単になるようです。あなたはサーバー側に行く必要がある理由はありますか? –

+0

はい、行(セルも)がサーバー側に作成されているためです。 – Dino

関連する問題