2012-03-25 42 views
7

Tệp .aspx và aspx.cs đang được biên soạn như thế nào? nó sẽ là hai hội đồng hoặc cả hai tập tin này kết hợp một và sẽ được tạo ra như một hội? Có bất kỳ hệ thống phân cấp/kế thừa nào mà nó theo sau không? .aspx đang được tạo ra như một tập tin mã C# tương ứng (chỉ sau đó chúng ta có thể tạo ra một assembly đúng không? sửa tôi nếu tôi sai!) là một trong các tệp windows designer.cs?Cách aspx đang được biên soạn?

+1

Tôi không thực sự hiểu câu hỏi, nhưng có thể http://odetocode.com/code/417.aspx và http://msdn.microsoft.com/en-us/library/015103yb(v= này vs.71) .aspx sẽ giúp bạn. –

Trả lời

9

Tùy thuộc vào loại dự án. Với ASP. Net bạn có thể tạo hai loại dự án: Web Application Project and Web Site Project..

Tệp .aspx và aspx.cs đang được biên soạn như thế nào?

Với dự án Web Application, bạn biên dịch mã đằng sau các tệp aspx, điều khiển người dùng và mã khác được tìm thấy trong dự án này thành một dll duy nhất và triển khai nó trên máy chủ.

Với Web Site Project bạn chỉ cần sao chép mã nguồn trên máy chủ và ASP .Net sẽ xử lý việc biên dịch cho bạn. Dự án Trang web giữ mã nguồn của các lớp tùy chỉnh trong thư mục App_Code (bạn sẽ phải đọc thêm về các lớp này trên liên kết đó)

Nó sẽ là hai tập hợp hoặc cả hai tệp này kết hợp một và sẽ được tạo thành một hội,, tổ hợp?

Không có trường hợp nào trong số này, mã được tìm thấy trong các tệp aspx, ascx không được bạn biên soạn (sử dụng Visual Studio, v.v.). ASP .Net phân tích các tệp này và tạo một dll được lưu trữ trong thư mục tạm thời của nó. Các "aspx, ascx" dlls (nó có thể được nhiều hơn một duy nhất mặc dù) là các tập tin khác nhau hơn một trong những bạn tạo ra với Visual Studio (và tôi tin là khác với một được tạo ra từ App_Code thư mục, vì mã đó không thể mã truy cập được tìm thấy trong các trang).

Có bất kỳ cấu trúc phân cấp/kế thừa nào sau đó không?

Có. Khi một trang được phân tích cú pháp và biên dịch, lớp được tạo ra đó sẽ kế thừa một lớp có tên là thuộc tính "Inherits", được tìm thấy tại chỉ thị @Page.

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" 
     Inherits="WebApplication1._Default" %> 

ASP Net phân tích tập tin Default.aspx và tạo ra một lớp học mà được thừa hưởng WebApplication1._Default

public class default_aspx : global::WebApplication1._Default 
{ 

} 

Giving thực tế là các lớp được tạo ra từ ngữ đánh dấu được thừa hưởng một lớp được viết bởi chúng tôi (thường là một trong mã phía sau, tệp aspx.cs), chúng tôi được tự do sử dụng các thành viên hoặc phương pháp của nó.

Các phương pháp sau đây là một phương pháp của lớp _Default:

protected string ToUpper(string source) 
     { 
      return source.ToUpper(); 
     } 

Sau đó trong đánh dấu chúng ta có thể gọi:

<form id="form1" runat="server"> 
    <%= ToUpper("Microsoft") %> 
</form> 

Chúng tôi thậm chí có thể viết trong một cái gì đó đánh dấu như:

<% SomeValue = 1; %> 
<%= SomeValue %> 

Trường hợp SomeValue ít nhất là thuộc tính được bảo vệ của lớp _Default.

Chúng tôi đang miễn phí để khai báo các thành viên và viết mã máy chủ trong đánh dấu thêm:

<head runat="server"> 

    <script runat="server" language="C#"> 
     private int someCounter = 10; 
    </script> 

</head> 
<body> 
    <% for (var i = 0; i < someCounter; i++) 
     { %> 
     <p> 
      Paragraph number:<%= i %> 
     </p> 
    <% } %> 
</body> 
</html> 

Ở đây tôi tuyên bố một lĩnh vực someCounter và sử dụng nó để viết 10 đoạn. Tất nhiên đây không phải là cách khuyến khích để làm những việc như vậy. Vì someCounter là thành viên của lớp được tạo nên điều này không thể truy cập được ở mã phía sau.

Có một lợi thế lớn (và thực tế hơn) của kiến ​​trúc này. Giả sử một số trang trong trang web là loại tĩnh (about.aspx, privacy.aspx, v.v.), chúng sử dụng cùng một trang chính. Mã phía sau trong các trang này không thay đổi. Điều này có nghĩa là chúng ta có thể tạo các trang khác và triển khai chúng mà không cần phải biên dịch mã nào khác (khía cạnh này áp dụng cho các dự án ứng dụng web). Ngoài ra, trước khi phát trực tiếp, chúng tôi có thể chỉ cho phép một người xem các trang này. Vì vậy, để đạt được điều này, chúng tôi tạo ra một lớp PreviewPage

public PreviewPage: System.Web.Page 
{ 
    public PreviewPage() 
    { 
      this.Load += (o, e) => { 
       // code here to see if the authenticated user has the right to see the page 
       // if not, redirect the user to another page 
      } 
    } 
} 

Và thay đổi giá trị Inherits:

<%@ Page Language="C#" Inherits="WebApplication1.PreviewPage" %> 

aspx đã được tạo ra như là một mã số tương ứng với C# tập tin

Các Language thuộc tính trong @Page chỉ thị ra lệnh ngôn ngữ nào được sử dụng để biên dịch tệp aspx/ascx. Vì vậy, bạn thực sự có thể sử dụng VB.Net trong tập tin aspx và biên dịch trang web với trình biên dịch C#.

Đây là một trình biên dịch khác, khác với Visual Studio, nó được thực hiện với các tùy chọn khác nhau. Đây là lý do tại sao trong web.config có các tùy chọn để đặt compilationMode thành Debug/Release và cũng để hướng dẫn trình biên dịch sử dụng các tùy chọn có sẵn khác.

+0

Khi một trang được phân tích cú pháp và biên dịch, lớp được tạo ra đó sẽ kế thừa một tên -> lớp được tạo có nghĩa là lớp aspx/ascx? – deen

+0

Tôi muốn nói "có tên tại Inherits". Xin lỗi, như bạn có thể thấy, tiếng anh không phải là bản địa của tôi và tôi có rất nhiều thứ để học cách đánh vần/viết. Tôi đã thêm một ví dụ –