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)
Câu hỏi tuyệt vời đẫm máu và tôi không có sương mù. – jcolebrand
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
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