Asp.net Webform Отображение оповещения и перенаправления - PullRequest
7 голосов
/ 23 апреля 2009

Я сейчас застрял. У меня есть веб-форма с кнопкой, которая регистрирует или сохраняет запись. Я хотел бы, чтобы он отображал предупреждение 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 ]

7 голосов
/ 23 апреля 2009

Вы не можете сделать Response.Redirect, потому что ваше предупреждение 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);
}
4 голосов
/ 08 февраля 2012

Это прекрасно работает:

string url = "home.aspx";
ClientScript.RegisterStartupScript(this.GetType(), "callfunction", "alert('Saved Sucessfully.');window.location.href = '" + url + "';",true);
4 голосов
/ 24 апреля 2009

Метод 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;
    }
}

Код не проверен, но должен указывать правильное направление

1 голос
/ 20 ноября 2009
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);
}  
...