2012-06-11 18 views
12

Tôi nhận được một lỗi trong ứng dụng asp.net của tôi mà đọcLỗi: Không thể để đánh giá biểu hiện vì mã được tối ưu hóa

"Không thể để đánh giá biểu hiện vì mã được tối ưu hóa hoặc một khung bản địa nằm trên ngăn xếp cuộc gọi. "

protected void btnCustomerProfile_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Server.Transfer("CustomerProfile.aspx"); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.ToString()); 
    } 
    finally 
    { } 
} 

Sau khi tìm kiếm SO, tôi thấy hầu hết các bài đăng tương tự liên quan đến response.redirect. Mã của tôi đang sử dụng server.transfer và ứng dụng của tôi cũng đang sử dụng Trang chính.

Tôi làm cách nào để giải quyết vấn đề này?

Cập nhật: Vì lý do nào đó, lỗi này xảy ra là tôi cũng sử dụng Response.Redirect. Thật không may tôi không thể sử dụng Server.Execute, bởi vì Server.Execute gọi trang gọi đến cuối.

+0

bạn có thể đăng đoạn mã ném ngoại lệ không? – davioooh

+0

uhmm ... trong trường hợp của tôi, sự cố là do 'Response.End' ... Nhưng nhìn vào mã của bạn rất khó để nói nguyên nhân của sự cố này là gì? – davioooh

Trả lời

13

Bạn sẽ nhận được một lỗi, nhưng khối mã dưới đây sẽ bẫy nó và bạn có thể nhận được về với cuộc sống của bạn.

Hãy thử điều này:

using System.Threading.ThreadAbortException; 

catch(ThreadAbortException ex) 
{ 
    throw; 
} 
+0

tôi đã thêm điều này nhưng vẫn nhận được lỗi tương tự –

10

Vấn đề bạn mô tả có vẻ là do thiết kế như thể hiện ở đây:

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

Sử dụng Server.Execute nên giải quyết vấn đề

+0

Thông tin trên liên kết của bạn cho biết .net 1.0 & 1.1 khung. Tôi đang sử dụng 4.0 framework. Tôi nghĩ vấn đề này sẽ được giải quyết sau 8 năm. – DotNetRookie

+7

@DotNetRookie Microsoft không giải quyết được sự cố, chỉ đánh dấu chúng là "sự cố đã biết" ... :) – davioooh

+0

Vấn đề với server.execute là nó quay lại trang gọi điện. Kể từ khi tôi hiện đang có mã mà không server.transfer tôi muốn xem nếu tôi có thể gắn bó với chiến lược đó cùng một mã hóa. http://techahead.wordpress.com/2007/10/14/aspnet-servertransfer-vs-serverexecute/ – DotNetRookie

2

Bạn đã cố gắng thay thế server.transfer với response.redirect()?

Server.Transfer VS Response.Redirect

+0

Ứng dụng hiện có mã sử dụng server.transfer (mã được thực hiện bởi một nhà phát triển không còn ở đây), vì vậy tôi cần phải phù hợp với kiến ​​trúc hiện tại. – DotNetRookie

1

tôi phải đối mặt với thông báo này khi tôi đã được thử nghiệm làm việc của đa luồng ứng dụng sử dụng MS-Test.

Tôi tìm thấy lý do cho điều này là do chủ đề chính thử nghiệm đã kết thúc và khởi tạo làm sạch đối tượng trong khi các luồng được tạo khác có nghĩa là chạy vô hạn vẫn đang hoạt động.

Khi phương pháp dọn dẹp gọn gàng giết chết các đối tượng, các chủ đề này bị hủy bỏ hiển thị phía trên thông báo.

Các vấn đề liên quan