2012-06-19 27 views
6

Tôi đã cố gắng thêm một số mã thử nghiệm không sản xuất bằng cách tạo tệp một phần thứ ba ngoài MyPage.aspx và MyPage.aspx.cs và MyPage.aspx.designer.cs. Tôi gọi MyPage.aspx.TEST.cs tập thứ ba của tôiTại sao một sự kiện không thể đăng ký khi nó là một phần của tệp phần 3 trong ASP.NET?

Trong MyPage.aspx.TEST.cs tập tin một phần, tôi đã viết như sau:

protected override void OnInit(EventArgs e) 
{ 
    Page.LoadComplete += RunTest; 
    base.OnInit(e); 
} 
//Assert. 

public void RunTest(object sender, EventArgs e) 
{ 
    //Clever assertions 
} 

mã biên dịch và tôi sau đó dịch ngược mã và ở đó, tôi có thể thấy ghi đè OnInit và phương thức RunTest.

Nhưng khi tôi thực thi trang, sự kiện không đăng ký, cũng không chạy, cũng như tôi không thể đặt điểm ngắt.

Tôi di chuyển mã đó ra khỏi lớp một phần MyPage.aspx.TEST.cs vào tệp một phần MyPage.aspx.cs và thanh ghi sự kiện và được thực thi. Stranger, khi tôi biên dịch lại hội đồng, và làm một sự khác biệt, lớp học xuất hiện để dịch ngược lại cùng một mã.

manh mối có thể xảy ra mà bạn có thể không liên quan:

  • Trang sử dụng autoeventwireup = "true" (Tôi vẫn nhận được hành vi tương tự nếu tôi cố gắng đăng ký sự kiện của tôi Page_LoadComplete của tôi)
  • Ứng dụng này là một trang web ứng dụng (ieuses một tập tin proj)
  • Tệp một phần không biên dịch (và nếu tôi đưa lỗi vào tệp một phần, nó sẽ ngăn chặn biên dịch, vì vậy tôi biết chắc chắn rằng một phần tệp sẽ được biên dịch)
  • Tôi nhận được cùng một kết quả sử dụng các sự kiện khác nhau (PreRen der, vv)
+0

Câu hỏi tuyệt vời đẫm máu và tôi không có sương mù. – jcolebrand

+0

Bạn đã kiểm tra xem tên lớp và không gian tên của bạn có giống hệt nhau trong cả ba tệp lớp một phần không? – StriplingWarrior

+0

Tôi tìm thấy vấn đề, nó phải làm với chỉ thị- nếu nó nói codeFile = "foo.cs" nó chỉ biên dịch hai tệp. Nếu nó nói codeBehind "nó hoạt động như Jupaol đã chứng minh nó nên. – MatthewMartin

Trả lời

2

Đây là kỳ lạ, tôi chỉ cần thực hiện các thí nghiệm tương tự và tất cả các sự kiện đang được sa thải, tôi có điều kiện tương tự, ứng dụng web, autoeventwireup = true

Bạn có kế thừa từ cơ sở khác trang?

Đây là partial class của tôi:

public partial class _Default 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     this.LoadComplete += RunTest; 
     this.Load += new EventHandler(_Default_Load); 
     base.OnInit(e); 
    } 

    void _Default_Load(object sender, EventArgs e) 
    { 
     //throw new NotImplementedException(); 
    } 

    void RunTest(object sender, EventArgs e) 
    { 
     //throw new NotImplementedException(); 
    } 

    protected override void OnPreRender(EventArgs e) 
    { 
     this.Response.Write("omfgggg"); 
     this.lblMyMessageTest.Text = "omfg2"; 
     base.OnPreRender(e); 
    } 
} 

Tất cả các sự kiện hoạt động, nếu tôi bỏ ghi chú //throw new NotImplementedException(); tôi nhận được ngoại lệ như mong đợi.

Hãy thử như sau:

  • Đảm bảo tên của các lớp học trang cục bộ của bạn được cùng
  • Cố gắng thay đổi Page.LoadComplete += RunTest;-this.LoadComplete += RunTest;
  • Đảm bảo bạn không chấm dứt phản ứng của trang khi một ngoại lệ xảy ra
  • Nếu bạn có mô-đun HTTP tùy chỉnh, hãy thử tắt mô-đun, nó có thể cản trở sự kiện bằng cách nào đó
+1

Tôi tìm thấy vấn đề, nó đã làm với các chỉ thị, nếu nó nói codeFile =" foo.cs "nó biên dịch chỉ hai tập tin. Nếu nó nói codeBehind" nó hoạt động như Jupaol đã chứng minh nó nên. Cảm ơn bạn đã chứng minh khái niệm này hoạt động, một khi tôi đã có bằng chứng về khái niệm của bạn, tôi chỉ làm so sánh mã cho đến khi tôi tìm thấy những gì là khác nhau. – MatthewMartin

+0

Ồ, đó là một điều tốt. – Jupaol

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