2011-11-19 46 views
9

Câu hỏi của tôi nói chung về vẽ đường ống, tôi đã thấy sơ đồ đường ống dẫn ASP.NET MVC và có một bước gọi là Công cụ xem, vì vậy nó hoạt động như thế nào? Tôi muốn biết về các trường hợp này:Vòng đời trang dao cạo trong ASP.NET MVC

  • Trang đầu tiên hoặc trang cái được hiển thị là gì?
  • Nếu tôi sử dụng Response.End() trong số @{} khối ở đầu trang thì việc thực hiện ngắt trang này và ngừng hiển thị chế độ xem?

Trả lời

15

Trang kết quả đầu tiên, trang cái hoặc chế độ xem được hiển thị là gì?

Chế độ xem. Trình phân tích cú pháp bắt đầu từ Bố trí và xây dựng cấu trúc LIFO (Last In First Out) đệ quy xuống các khung nhìn con và partials. Khi LIFO đã sẵn sàng, nó bắt đầu xuất hiện và xử lý các phần tử. Điều này có nghĩa rằng phần lớn nhất bên trong/lượt xem sẽ được xử lý trước khi bố trí và phần cuối cùng được xử lý chính là Bố cục.

Nếu tôi sử dụng Response.End() trong @} {khối vào lúc bắt đầu của trang không thực hiện gián đoạn này của trang và dừng render của quan điểm?

Sử dụng Response.End trong bất kỳ chế độ xem nào sẽ khiến trang hoàn toàn trống được hiển thị. Không bao giờ sử dụng trong bất kỳ chế độ xem nào. Response.End về cơ bản hủy bỏ chuỗi hiện tại bằng cách kích hoạt một số ThreadAbortException mà không phải là thứ bạn muốn thực hiện trong chế độ xem Dao cạo.

+0

oh, cảm ơn bạn điều này giải thích nhiều điều cho tôi! – Alexander

2

Hãy xem qua số Request-Handling Pipeline Poster của Steve Sanderson. Nó giải thích toàn bộ quá trình yêu cầu khá chi tiết. Đó là từ MVC phiên bản 1.0, nhưng nó vẫn còn hợp lệ. Chỉ cần thay thế 'WebForm' bằng Razor.

Nó thực sự không nên làm phiền bạn cho dù chủ hoặc xem được trả trước. Bạn có thể giải thích tại sao điều này quan trọng với bạn?

+0

đôi khi tốt để biết mọi thứ hoạt động như thế nào, nó giúp hiểu tại sao nó hoạt động như thế này và không theo cách khác :) – Alexander

+3

Tôi có thể chứng minh lý do kiến ​​thức này là tốt. Tôi đã sử dụng cassette để bó trong dự án của mình. Nó có phương pháp tĩnh cho "bao gồm" gói tài nguyên trong trang. Một khối mã như '@ {Bundles.Reference (" ~/bundle/pageScripts "," Head ");}' trong chế độ xem con sẽ được thực hiện trước và nếu nó phụ thuộc vào jquery được định nghĩa trong bố cục, mã của bố cục sẽ thực hiện sau khi xem con, điều này sẽ dẫn đến việc sắp xếp không chính xác các tệp kịch bản lệnh. Có một số cách để khắc phục điều này, nhưng nó giúp để biết lý do tại sao các cuộc gọi đang diễn ra theo thứ tự đó. – JonathanTech

+2

Lý do @ JonathanTech đưa ra là lý do tôi cần biết điều này - chỉ có tôi đang sử dụng System.Web.Optimization của MVC4 thay vì Cassette. Cùng một ý tưởng mặc dù. –

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