سؤال

أنا عالق حاليا. لدي شبكة الإنترنت مع زر يسجل أو يحفظ سجل. ما أرغب في أنه عرض تنبيه جافا سكريبت ثم إعادة توجيه إلى صفحة. هنا هو الرمز الذي أستخدمه

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 لن يتم عرضه أبدا. من الأفضل أن يكون لديك رمز 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 إلى المتصفح، وبالتالي بدء طلب صفحة جديدة حيث لم يعد البرنامج النصي للعميل المسجل موجزا.

نظرا لأن الرمز الخاص بك ينفذ على جانب الخادم، فلا توجد طريقة لعرض جانب عميل التنبيه وأداء إعادة التوجيه.

أيضا، يمكن أن يكون عرض مربع تنبيه جافا سكريبت مربكا لسير العمل العقلي للمستخدم، وسوف تكون رسالة مضمنة أكثر تفضيلا. ربما يمكنك إضافة الرسالة إلى الجلسة وعرضها على طلب صفحة Default.aspx.

protected void Save(..)
{   
    // Do save stuff
    Session["StatusMessage"] = "The changes were saved Successfully";
    Response.Redirect("Default.aspx");
}

ثم في Default.aspx.cs Code خلف (أو فئة صفحة قاعدة مشتركة حتى يحدث هذا في أي صفحة، أو حتى صفحة الماجستير):

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