2009-08-25 26 views
7

Tại sao mã phía sau một lớp từng phần cho các trang aspx?Tại sao tệp aspx code-behind được khai báo là các lớp một phần?

+0

Và bạn nên chỉnh sửa tiêu đề câu hỏi của mình. Nó không phải là một câu hỏi _stupid_. –

+2

"Không có câu hỏi ngu ngốc, chỉ có những người ngu ngốc" - Ông Garrison, South Park. OK, do đó không áp dụng ở đây, tôi chỉ thích câu nói đó. : D – Powerlord

+0

Câu hỏi ngu ngốc duy nhất là câu hỏi mà bạn không hỏi. – belugabob

Trả lời

12

tôi sẽ giới thiệu bạn đến này MSDN Page (ASP.NET Page Class Tổng quan).

Khi trang được biên soạn, ASP.NET tạo một lớp học một phần dựa trên tệp .aspx; lớp này là một phần của lớp của tệp lớp mã-đằng sau. Tệp lớp một phần được tạo chứa các khai báo cho các điều khiển của trang. Lớp học một phần này cho phép tệp mã phía sau của bạn được sử dụng làm một phần của một lớp hoàn chỉnh mà không cần yêu cầu bạn khai báo các điều khiển một cách rõ ràng.

Xem biểu đồ này:

alt text http://img30.imageshack.us/img30/7692/msdnchart.gif

Bằng cách này bạn có một lớp có chứa logic của bạn và một lớp có chứa thiết kế thứ. Tại thời gian biên dịch nó được tạo ra như một toàn thể.

+1

Đây là một trong những biểu đồ "cho phép tạo biểu đồ từ thứ gì đó không phải là biểu đồ". – womp

+0

"Mô hình kế thừa cho các trang mã sau hơi phức tạp hơn so với các trang đơn tệp" Phần trong Bài viết MSDN đó rất hữu ích để hiểu biểu đồ này tốt hơn –

4

Bởi vì có những bộ phận khác của lớp (thứ Designer) đó là ẩn từ nhà phát triển

Ví dụ, thay vì điều này

public MyBasePage : System.Web.UI.Page 
{ 
    ... 
    protected System.Web.UI.Label lblName; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    ... 
} 

ASP.NET sẽ tạo các những tờ khai trong các tập tin vật lý khác nhau, để lại này

public partial class MyBasePage : System.Web.UI.Page 
{ 
    ... 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    ... 
} 

Thông tin thêm:

+0

bạn có thể xây dựng? là nó tương tự như các tập tin thiết kế winforms? – andrewWinn

+0

@andrewWinn - yep, nó là tương đương với tệp thiết kế winforms - trong ASP.NET 1.1 sẽ có tất cả các khai báo điều khiển ở đầu mã phía sau của bạn, và sau đó một vùng được thu gọn ở dưới cùng được nhận xét dọc theo dòng " Nhà thiết kế đã tạo, không sửa đổi "nơi tất cả các sự kiện đã được kết nối. –

+0

@jaun, liên kết bạn đã cung cấp không hoạt động. – ShaileshDev

1

Khai báo một phần cho phép bạn viết mã trong các tệp khác - chỉ cần đặt mã trong cùng một không gian tên và đặt tên cho lớp giống nhau và chúng sẽ được xử lý như thể chúng nằm trong cùng một tệp. Thật tuyệt vời khi thêm chức năng vào các tệp được tạo. Tôi thường xuyên sử dụng nó để thêm các hàm/thuộc tính vào đối tượng LinqToSql của tôi.

+0

Thêm vào đó giúp giữ tất cả mã được tạo xấu xí khỏi bạn và vô tình chỉnh sửa nó. Bạn phải có mục đích nhiều hơn bây giờ để chỉnh sửa nó .... :) – klabranche

1

Lý do khác cho một phần tệp là xử lý trường hợp một số định nghĩa lớp được tạo bởi công cụ (Và có thể được tạo lại tại một số điểm) và phần còn lại của lớp được bạn triển khai.

Trong trường hợp này, không sử dụng một phần lớp sẽ dẫn đến mã của bạn bị ghi đè hoặc quá trình tạo khó khăn khi thực hiện công việc của mình (Nếu có thể làm được).

Với các lớp từng phần, mã được tạo có thể dễ dàng được tạo lại mà không cần chạm vào mã của bạn.

Một ví dụ điển hình khác là khi sử dụng lớp DataContext cho LINQ-to-SQL: Công cụ thực sự thông minh được tạo thành một tập hợp các tệp lớp một phần và bạn có thể cung cấp triển khai - để xác thực, v.v. lớp học, an toàn trong kiến ​​thức rằng tái tạo sẽ không phá hủy công việc của bạn.

0

Aspx.cs sử dụng lớp PARTIAL vì các điều khiển (ví dụ: TextBox, GridView) được truy cập trong lớp này được khai báo trong tệp .Aspx (tức làVề mặt vật lý Một tệp khác) do đó, một lớp chứa khai báo kiểm soát (tệp .aspx) và một logic nghiệp vụ khác dựa trên các điều khiển được khai báo trên tệp .aspx. khi họ được biên soạn, coi như toàn bộ một lớp duy nhất.

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