Asp.net Веб-форма Отображает предупреждение и перенаправляет
-
13-09-2019 - |
Вопрос
В данный момент я застрял.У меня есть веб-форма с кнопкой, которая регистрирует или сохраняет запись.Чего бы я хотел, так это чтобы он отображал предупреждение 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
);
}
Кто-нибудь может помочь мне найти решение этой проблемы?
Спасибо
Решение
Вы не можете выполнить ответ.Перенаправление, потому что ваше предупреждение javascript никогда не будет отображаться.Лучше, чтобы ваш 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.Перенаправление, 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);
}