Kod optimize edildiğinden veya yerel bir çerçeve çağrı yığınının üstünde olduğu için ifade değerlendirilemiyor


143

Hata alıyorum:

Kod optimize edildiğinden veya yerel bir çerçeve çağrı yığınının üstünde olduğu için ifade değerlendirilemiyor.

Tekrarlayıcının itemcommand etkinliğinde yeni bir sayfaya yönlendirdim. Hata şu satırda oluşur:

string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString();
Response.Redirect(url);

Biri lütfen bana yardım edebilir mi? Orada yanlış bir şey mi var? Bu _COMPlusExceptionCode- 532459699.

Yanıtlar:


162
Request.Redirect(url,false);

false geçerli sayfanın yürütülmesinin sonlanıp sonlanmayacağını belirtir.


2
Request.Redirect (url, false) gibi bir şey var mı?
F11

istek yönlendirme özelliği yoktur
karan

@karan hangi sürümü de kullanmak istediğiniz gibi "İstek" gibi olacak
PrateekSaluja

125

Aşağıda gösterildiği gibi ikinci Response yanlış argümanını yapın .

Response.Redirect(url,false);

67

çözüm

Bu soruna geçici bir çözüm bulmak için <a0> </a0>, aşağıdaki yöntemlerden birini kullanın:

belirtiler

Response.End, Response.Redirect veya Server.Transfer yöntemini kullanırsanız, ThreadAbortException özel durumu oluşur. Bu özel durumu yakalamak için bir try-catch deyimi kullanabilirsiniz.

Sebep olmak

Response.End yöntemi sayfa yürütmesini sonlandırır ve yürütmeyi uygulamanın olay kanalında Application_EndRequest olayına kaydırır. Response.End öğesini izleyen kod satırı yürütülmez.

Bu sorun Response.Redirect ve Server.Transfer yöntemlerinde oluşur çünkü her iki yöntem de Response.End'i dahili olarak çağırır.

durum

Bu davranış tasarım gereğidir.

Özellikleri

Makale numarası: 312629 - Son inceleme: 30 Ağustos 2012 - Revizyon: 4.0

İçin geçerlidir

  • Microsoft ASP.NET 4.5
  • Microsoft ASP.NET 4
  • Microsoft ASP.NET 3.5
  • Microsoft ASP.NET 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0

Anahtar kelimeler: kbexcepthandling kbprb KB312629

Kaynak: PRB: Response.End, Response.Redirect veya Server.Transfer kullanırsanız ThreadAbortException oluşur


14

Araştırdığım bir hatada bir Response.Redirect () vardı ve beklenmedik bir yerde ( read: uygunsuz konum - bir üye özellik alıcı yöntemi içinde ) yürütüyordu .

Bir sorunu ayıklıyor ve " İfade değerlendirilemiyor ... " istisnasını yaşıyorsanız :

  1. Bir arama yapın Response.Redirect()ve ikinci parametreyi endResponse = false yapın veya
  2. Yönlendirme çağrısını geçici olarak devre dışı bırakın .

Hata ayıklayıcıdaki "adım adım" bu konuma ulaşmadan önce Yönlendirme çağrısını yürütüyormuş gibi görünmesi sinir bozucuydu .


13

Bu sorunun nedenini ve hatayı gidermek için lütfen bu bağlantıyı kontrol edin:

http://support.microsoft.com/kb/312629/EN-US/

Microsoft Destek Makalesi:

SORUN: Thread.EbortException Response.End, Response.Redirect veya Server kullanırsanız oluşur.

Bu soruna geçici bir çözüm bulmak için <a0> </a0>, aşağıdaki yöntemlerden birini kullanın: Response.End için, Application.EndRequest olayına kod yürütme atlamak için Response.End yerine HttpContext.Current.ApplicationInstance.CompleteRequest yöntemini çağırın.

Response.Redirect için, Response.End iç aramasını bastırmak üzere endResponse parametresi için false ileten bir aşırı yük, Response.Redirect (String url, bool endResponse) kullanın.

Örneğin: Response.Redirect ("nextpage.aspx", yanlış);

Bu geçici çözümü kullanırsanız, Response.Redirect'i izleyen kod yürütülür. Server.Transfer için bunun yerine Server.Execute yöntemini kullanın.


3

Ben de aynı sorunu vardı, ve zor oldu. Benim için, çünkü Ext.Js javascript kitaplığı kullanıyorum. Ajax çağrısında eriştiğiniz sunucu tarafı kodunda response.redirect yapıyorsanız , sorunlar var. Ext.js, Ext.Redirect yöntemiyle bir geçici çözüme sahiptir.


3

sorunu çözmek için bu kodu kullanın:

string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Uploadfile\\" + fileName;
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bt = new byte[fs.Length];
fs.Read(bt, 0, (int)fs.Length);
fs.Close();
Response.ContentType = "application/x-unknown/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName;+ "\"");
try
{
    if (bt != null)
    {
        System.IO.MemoryStream stream1 = new System.IO.MemoryStream(bt, true);
        stream1.Write(bt, 0, bt.Length);
        Response.BinaryWrite(bt);
        //Response.OutputStream.Write(bt, 0, (int)stream1.Length);
        Response.Flush();
        // Response.End();
    }
}
catch (Exception ex)
{
    Response.Write(ex.Message);
    throw ex;
}
finally
{
    Response.End();
}

5
Bu kodun ne yaptığına dair biraz daha açıklama iyi olurdu.
Meryovi


2

Response.nd () kullandığım sorunları başka biriyle karşılaştırarak bir zaman uyumsuz tetik düğmesi

<asp:AsyncPostBackTrigger ControlID="btn_login" />

bir güncelleme panelinde. Ben en iyi değil düzenli yazı geri döndü ama çalıştı.

<asp:PostBackTrigger ControlID="btn_login" />. 

Yalnızca sayfaya yönlendirdiğim için bu geçerli bir çözümdü.


2

Eğer excel indirmek için Güncelleme Paneli ve bağlantı düğmesini kullanıyorsanız geri gönderme tetik eklemek daha panelin içinde

<asp:PostBackTrigger ControlID="lnkTemplate" /> 

ve iç koddaki tıklama etkinliğinin arkasındaki kodda

string ServerPath = System.Configuration.ConfigurationManager.AppSettings["FilePath"] + "Template.xlsx";
System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(ServerPath));

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
            HttpContext.Current.Response.ContentType = "application/octet-stream";
 HttpContext.Current.Response.TransmitFile(file.FullName);
 HttpContext.Current.Response.Flush();
 HttpContext.Current.ApplicationInstance.CompleteRequest();

1

Bunu kullan, her zaman benim için çalışır.

Response.Redirect(Request.RawUrl, false);

Response.Redirect (Request.RawUrl) sadece geçerli bağlamın url'sine yönlendirme yaparken, ikinci "false" parametresi endResponse'yi gösterir ya da etmez.


1
Stackoverflow'a hoş geldiniz. Lütfen yanıtınızı açıklayın, neden sorunu nasıl çözdüğü işe yarıyor, böylece diğerleri kolayca anlayabiliyor.
octobus

0

Bu sorun, bazı doğrulama kuralları olan bir model ile mvc bir jilet sayfanız olduğunda bir sonuç olabilir. Bir formdan gönderip bazı alanlarda doğrulama hataları görüntülemeyi unutursanız, bu ileti görüntülenebilir. Spekülasyon: Bu, yayınladığınız yöntem farklıysa ve diğer kaynaklar tarafından kullanılıyorsa veya orijinal isteği sunan yöntemden farklı bir yerde bulunuyorsa olabilir.

Farklı olduğundan, dışlama ve model durumu aynı olmadığından (böyle bir şey) hataları görüntülemek veya işlemek için orijinal sayfaya geri dönemez.

Bulmak biraz zor olabilir, ancak yapılması kolay bir hata olabilir. Alım yönteminizin, posta göndermek için olası tüm yolları gerçekten doğruladığından emin olun.

örneğin, formda doğrulamanızın izin verdiği maksimum değerden daha büyük bir dize yazmayı imkansız hale getiren sunucu tarafı doğrulamanız olsa bile, alma yöntemine gönderim yapan başka yollar ve kaynaklar olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.