3

以下のように表示できるポップアップ確認ボックスがあります。

しかし、ユーザーが[OK]をクリックしたのか、[キャンセル]をクリックしたのかはわかりません。

                ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirm('Do u wanna change?');</script>", false);

だから私がやりたいのはこんな感じです。

if (orignalId != newId)
                {
 ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirm('Do u wanna change?');</script>", false);

If (user clicks Yes)
{
add some data to SQL
}
else
{
return;
}
}

ユーザーが何をクリックしたかを知るにはどうすればよいですか?

私はこれを試しました

  1. 以下のコードをfolder1\jscrip.jsファイルに入れましたが、ページに使用済みのajax更新パネルがあるため、ClientScript.RegisterClientScriptIncludeを使用して参照できないため、呼び出し方法がわかりません。このリンクの6番目のポイントで述べたように:http://www.dotnetcurry.com/ShowArticle.aspx?ID = 274

Page.ClientScript.RegisterClientScriptInclude( "selective"、ResolveUrl(@ "folder1 \ jscrip.js"));

function confirmation()
{
if(confirm("Are you sure?")==true)
return true;
else
return false;
}

任意の提案???ありがとう

機能:

したがって、ユーザーは「最初に保存」というボタンをクリックし、「if(orignalId!= newId)」という条件をチェックします。これがtrueの場合、確認ボックスが表示されます。そうでない場合、確認ボックスは表示されません。ユーザーがクリックすると、 OKいくつかの値がDBに入力されているか、それ以外の場合は返され、何も実行されません

いくつかの追加コード:

protected void Page_Load(object sender, EventArgs e)
        {
if (!IsPostBack)
            {
            }
 else if (Label.Text != "")
            {
                Global.logger.Debug("Postback Happ, Label = " + Label.Text);
                Button2_Click(sender, e);
            }
        }

 protected void Button2_Click(object sender, EventArgs e)
        { if (orignalCsId != 0 && newCsId != 0)
                {
                    if (orignalId != newId)
                    {
                        Global.logger.Debug("Pop Up crossed1");
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", String.Format(CultureInfo.InvariantCulture, @"__doPostback('{0}', confirm('Your Data From iD1 will be populated in iD2?').toString());", Label.Text), true);
                    }
                    else if (Page.Request["__EVENTTARGET"] == Label.Text)
                    {
                        Global.logger.Debug("__EVENTARGUMENT1 = " + Page.Request["__EVENTARGUMENT"]);
                        bool userClickedOK = Boolean.Parse(Page.Request["__EVENTARGUMENT"]);
                        if (userClickedOK)
                        {
                            // Add some data to SQL.
                        }
                        else
                        {
                            return;
                        }
                        Label.Text = "";
                    }
                }
          }
4

4 に答える 4

3

非表示のフィールドを使用することもできますが、ユーザーが確認ボックスを閉じた後でも、ポストバックを強制する必要があります。とにかく__doPostBack()を呼び出すことになりますので、2番目の引数をconfirm()利用して、隠しフィールドを使用せずにサーバーに戻り値をポストすることができます。

if (originalId != newId) {
    ScriptManager.RegisterStartupScript(this, GetType(), "ajax",
        String.Format(CultureInfo.InvariantCulture, @"
            __doPostBack('{0}', confirm('Are you sure?').toString());
        ", yourUpdatePanel.ClientID), true);
} else if (Page.Request["__EVENTTARGET"] == yourUpdatePanel.ClientID) {
    bool userClickedOK = Boolean.Parse(Page.Request["__EVENTARGUMENT"]);
    if (userClickedOK) {
        // Add some data to SQL.
    } else {
        return;
    }
}

まず、2つのIDを比較します。それらが異なる場合は、クライアントに確認ボックスを表示し、その結果をサーバーにポストバックする必要があるため、それを行うためのスタートアップスクリプトを含めます(RegisterStartupScript()trueに最後の引数として順番に渡すことができることに注意してください)タグを生成させるため)。<script>

次に、クライアント側で、呼び出し__doPostBack()をブロックしてリターンを返した後、強制的にポストバックを呼び出す必要がありconfirm()ます。__doPostBack()2つの引数を取ります。ClientIDポストバックを開始したコントロール(イベントターゲット)と、オプションのイベント引数です。これらは、ポストバックイベントを発生させるために内部ASP.NET配管によって使用されますが、それは私たちがそれらを有利に使用できないことを意味するものではありません。

さらに、ポストバックが発生し、がイベントターゲットである場合、前述のASP.NET配管は、そのパネルのみを更新します(プロパティUpdatePanelによってはそれ以上ですが、それは別の問題です)。UpdateModeしたがって、更新するコントロールを含むのを呼び出し__doPostBack()ClientIDUpdatePanel戻り値をconfirm()文字列に変換します。

サーバー側に戻ると、ページが再読み込みされ、コードが再度実行されます。質問のコメントで、originalIdnewIdがまだ異なる場合は、確認ボックスを再度表示する必要があることを示唆しているので、今回は同じになると思います(else if確実に)。

に渡される引数は、およびリクエスト変数__doPostBack()からサーバー側でアクセスできます。したがって、最初に、イベントターゲットが私たちのものであるかどうかを確認します。その場合、強制的なポストバックを処理していることがわかり、の値は意味があります。したがって、Boolean.Parse()を呼び出して、クライアント側で以前に生成した文字列から逆シリアル化し、それを使用してデータベースを更新するかどうかを決定します。__EVENTTARGET__EVENTARGUMENTUpdatePanel__EVENTARGUMENT

于 2011-02-09T20:26:00.773 に答える
1

ページの[非表示]フィールドを使用し、ユーザーが確認したかどうかを確認したら、値をtrueまたはfalseに設定します。次に、@サーバー側で非表示フィールドの値を確認します。trueの場合は、プロセスを続行します。使用しない場合は、returnまたはexitsubを使用します。

function confirmDelete()
{

    var x = confirm("Are you sure you want to Delete?");
    if (x)
    { 
        document.getElementById('Hidden1').value = "True";
    }
    else
    {
        document.getElementById('Hidden1').value = "False";
    }
}

サーバ側

if (orignalId != newId)
                {
 ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirmDelete();</script>", false);

If (Hidden1.value=="True")
{
add some data to SQL
}
else
{
return;
}

}

于 2011-02-09T20:07:34.463 に答える
0

この質問が出されてからしばらく経ちましたが、誰かがまだ簡潔で簡単な答えを探している場合に備えて、チャイムを鳴らしたいと思いました。dbアイテムの削除などのサーバー側の機能を確認するためのクライアント側のJavaScriptポップアップ(はいまたはいいえ、はいまたはキャンセルなど)を探している場合、私が見つけた最も簡単なルートは、マークアップのasp:buttonまたはasp:linkbutton:

<asp:LinkButton Text="Delete" ID="DeleteProj" runat="server" CommandName="deleteproj" OnClientClick="return confirm('Are you sure?');" CommandArgument='<%# Eval("ProjectID") %>'/> 

[いいえ]をクリックすると、ユーザーはページに戻ります。[はい]をクリックすると、設定したC#コードビハインドが実行されます。これは私のために働いた。

于 2014-08-22T15:13:53.560 に答える
0

ScriptManager.RegisterStartupScriptは、ポップアップをブロックする傾向があります。以下のリンクのアプローチを試してみると、ポップアップでクリックするたびに完全に制御できます。

http://02e34b5.netsolhost.com/youtube/Zpopup.aspx

このポップアップには、ajax、javascript、jquery、またはcssのトリックは必要ありませんが、完全に制御できます。

于 2014-08-27T00:52:14.620 に答える