0

ページが読み込まれるたびに表示されるビジュアルWebパーツのjQuery/javascriptにモーダルダイアログポップアップを作成しました。ポップアップには送信ボタンがあり、クリックすると、ユーザー名と承認された日付がカスタムリストに保存されます。動作するjQコード:

 <script language="javascript" type="text/javascript"  src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">

</script>
<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        ExecuteOrDelayUntilScriptLoaded(openDialog, "SP.js");        
    });

    //open dialog



    // Call openDialog method on button click or on page load  

    function openDialog() {
        //alert("In funciton opendialog");
        var options = {

            //html: divModalDialogContent,  // ID of the HTML tag

            // or HTML content to be displayed in modal dialog

            width: 400,

            url: "/_layouts/ModalDialog1/ModalDialog.aspx",

            height: 125,

            title: "Acknowedgement Popup",

            dialogReturnValueCallback: dialogCallbackMethod,  // custom callback function

            allowMaximize: false,

            showClose: false

        };
        SP.UI.ModalDialog.showModalDialog(options);

    }


    // Custom callback function after the dialog is closed

    function dialogCallbackMethod(result, returnValue) {

        alert("dialogResult" + result + "nreturnValue" + returnValue);
                if(result == SP.UI.DialogResult.OK)
         {
         alert("You chose the OK button");
         //document.title = returnValue;
         }

        if(result == SP.UI.DialogResult.cancel)
         SP.UI.Notify.addNotification("You chose the Cancel button");
         }

    }

</script>


今、私はこのコードでリストにユーザー名を追加しています。ポップアップでボタンがクリックされたときにトリガーされるaspxページを使用して、リストに保存しています。


protected void Button1_Click(object sender, EventArgs e)
    {
        Context.Response.Write(@"<script type='text/javascript'>
                                alert('Thanks for acknowledging!');
                                window.frameElement.commitPopup();
                                </script>");
        Context.Response.Flush();
        Context.Response.End(); 

        string username;
        using (SPSite site = new SPSite(SPContext.Current.Web.Url))
        {
            site.AllowUnsafeUpdates = true;
            using (SPWeb web = site.RootWeb)
            {
                web.AllowUnsafeUpdates = true;
                SPUser user = web.CurrentUser;

                username = user.LoginName.ToString();


                //adding list item
                SPList l = web.Lists["Acknowledgements"];
                SPListItem li = l.Items.Add();
                li["User"] = username;
                li["Acknowedgement Date"] = System.DateTime.Today;
                li.Update(); 

            }


        }

ここで、クライアントの要件は、月の初めにモーダルダイアログポップアップを表示し、ユーザー名がカスタムリストにすでに存在する場合はその月のモーダルダイアログポップアップを表示しないことです。私はグーグルで検索し、コードビハインドでJavaScriptを記述して使用できるregisterstartupscriptについて知りましたが、機能していません。私はリストからのユーザー名と現在ログインしているユーザー名を比較することを計画しており、彼がすでに承認している場合はポップアップを表示しませんが、さらに、JavaScriptがクライアント側にある場合にそれを達成する方法に勝ります。

string Script = @"function openDialog() { var options={
                    width:400,
                    url: '/_layouts/ModalDialog/ModalDialog.aspx', height:125,
                    title: 'Acknowedgement Popup',
                    dialogReturnValueCallback: dialogCallbackMethod, 
                    allowMaximize: false,
                    showClose: false
                    };
                    SP.UI.ModalDialog.showModalDialog(options);
                     }";Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "openDialog", Script, true); 


私はこれで正しい方向に進んでいますか?私はSharePointを初めて使用するので、助けてください。これは私を窮地に追いやる。よろしくお願いします。

4

1 に答える 1

0

マークアップでは、JSフラグ変数のプレースホルダーとしてリテラルを追加できます...openDialog関数の前に必ず追加してください。

<asp:Literal runat="server" ID="DlgFlag"></asp:Literal>

コードビハインドで、リストと照合し、ユーザー名が見つかった場合は、リテラルにフラグを出力します。

if (isUsernameInListAlready)
{
    DlgFlag.Text = "<script type=\"text/javascript\">var dlgFlag = true;</script>";
}

openDialog関数で、上部にあるこのフラグを確認し、フラグが存在する場合はダイアログを開かずに終了します。

function openDialog() {
    if (dlgFlag) return;

    //alert("In funciton opendialog");
    var options = {
    ...
于 2012-12-28T15:46:00.453 に答える