문제

나는 현재 붙어있다. 레코드를 등록하거나 저장하는 버튼이있는 웹 포름이 있습니다. 내가 원하는 것은 JavaScript Alert를 표시 한 다음 페이지로 리디렉션되도록하는 것입니다. 여기에 내가 사용중인 코드가 있습니다

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 경보가 표시되지 않기 때문에 Resdirect를 수행 할 수 없습니다. 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 Alert Box를 표시하는 것은 사용자의 정신 워크 플로에 혼란 스러울 수 있으므로 인라인 메시지가 훨씬 바람직합니다. 아마도 메시지를 세션에 추가하고 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);
}  
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top