Asp.net Webフォームは、警告を表示し、リダイレクト
-
13-09-2019 - |
質問
私は現在、こだわっています。私はレコードを登録するか、セーブボタンで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
);
}
誰も私がこれに対する解決策を見つけることができますか?
おかげ
解決
あなたはのResponse.Redirectを行うことはできません。より良いあなたのjavascriptのコードを持って、実際にアラートが表示された後にリダイレクトを行うにはwindows.location.href='default.aspx'
を行います。このような何かます:
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);
}
他のヒント
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;
}
}
のコードがテストされていないが、正しい方向にあなたを指している必要があります。
これは完璧に動作します:
string url = "home.aspx";
ClientScript.RegisterStartupScript(this.GetType(), "callfunction", "alert('Saved Sucessfully.');window.location.href = '" + url + "';",true);
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);
}