ASP.NET WebForm 표시 알림 및 리디렉션
-
13-09-2019 - |
문제
나는 현재 붙어있다. 레코드를 등록하거나 저장하는 버튼이있는 웹 포름이 있습니다. 내가 원하는 것은 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);
}