7

私は現在立ち往生しています。レコードを登録または保存するボタンのあるWebフォームがあります。私がしたいのは、JavaScriptアラートを表示してから、ページにリダイレクトすることです。これが私が使っているコードです

protected void Save(..)
{   
    // Do save stuff
    DisplayAlert("The changes were saved Successfully");
    Response.Redirect("Default.aspx");
}

このコードは、「保存に成功しました」というプロンプトを表示せずにリダイレクトするだけです。

これが私のDisplayAlertコードです

 protected virtual void DisplayAlert(string message)
    {
        ClientScript.RegisterStartupScript(
                        this.GetType(),
                        Guid.NewGuid().ToString(),
                        string.Format("alert('{0}');", message.Replace("'", @"\'").Replace("\n", "\\n").Replace("\r", "\\r")),
                        true
                    );
    }

誰かが私がこれに対する解決策を見つけるのを手伝ってもらえますか?

ありがとう

4

4 に答える 4

7

JavaScriptアラートが表示されないため、Response.Redirectを実行することはできません。windows.location.href='default.aspx'アラートが表示された後、JavaScriptコードで実際にリダイレクトを実行することをお勧めします。このようなもの:

protected virtual void DisplayAlert(string message)
{
    ClientScript.RegisterStartupScript(
      this.GetType(),
      Guid.NewGuid().ToString(),
      string.Format("alert('{0}');window.location.href = 'default.aspx'", 
        message.Replace("'", @"\'").Replace("\n", "\\n").Replace("\r", "\\r")),
        true);
}
于 2009-04-23T15:51:44.603 に答える
4

DisplayAlertメソッドは、現在実行中のページ要求にクライアントスクリプトを追加します。Response.Redirectを呼び出すと、ASP.NETはブラウザにHTTP 301リダイレクトを発行するため、登録されたクライアントスクリプトが存在しない場所で新しいページ要求を開始します。

コードはサーバー側で実行されているため、アラートをクライアント側に表示してリダイレクトを実行する方法はありません。

また、JavaScriptアラートボックスを表示すると、ユーザーのメンタルワークフローが混乱する可能性があるため、インラインメッセージの方がはるかに望ましいでしょう。おそらく、メッセージをセッションに追加して、これをDefault.aspxページリクエストに表示することができます。

protected void Save(..)
{   
    // Do save stuff
    Session["StatusMessage"] = "The changes were saved Successfully";
    Response.Redirect("Default.aspx");
}

次に、Default.aspx.csコードビハインド(または共通のベースページクラスで、これは任意のページ、さらにはマスターページでも発生する可能性があります):

protected void Page_Load(object sender, EventArgs e)
{
    if(!string.IsNullOrEmpty((string)Session["StatusMessage"]))
    {
        string message = (string)Session["StatusMessage"];
        // Clear the session variable
        Session["StatusMessage"] = null;
        // Enable some control to display the message (control is likely on the master page)
        Label messageLabel = (Label)FindControl("MessageLabel");
        messageLabel.Visible = true;
        messageLabel.Text = message;
    }
}

コードはテストされていませんが、正しい方向を示しているはずです

于 2009-04-24T08:34:26.627 に答える
4

これは完璧に機能します:

string url = "home.aspx";
ClientScript.RegisterStartupScript(this.GetType(), "callfunction", "alert('Saved Sucessfully.');window.location.href = '" + url + "';",true);
于 2012-02-08T10:07:01.210 に答える
1
protected void Save(..)
{       
    // Do save stuff    
    ShowMessageBox();  
} 

private void ShowMessageBox()
{        
    string sJavaScript = "<script language=javascript>\n";        
    sJavaScript += "var agree;\n";        
    sJavaScript += "agree = confirm('Do you want to continue?.');\n";        
    sJavaScript += "if(agree)\n";        
    sJavaScript += "window.location = \"http://google.com\";\n";        
    sJavaScript += "</script>";      
    Response.Write(sJavaScript);
}  
于 2009-11-19T22:15:09.267 に答える