2012-03-28 43 views
9

... trước mọi thứ, tôi chỉ làm điều này vì tò mò thôi. Không có ứng dụng thực tế nào ở đây, nhưng chỉ cho kiến ​​thức và tinkering về ...ASP.net MVC có phải là một "lớp học" không?

Chế độ xem ASP.NET có các thuộc tính như ModelViewData và thậm chí có cả phương pháp.

Bạn thậm chí có thể sử dụng @Using giống như tệp thông thường class.cs.

Tôi biết rằng nó là loại WebPageView<TModel>

câu hỏi chính của tôi là: là nó một lớp học?

Nó phải là bởi vì nó là một loại, nhưng ..

tôi sẽ có thể cũng để làm điều này sau đó (engine Razor):

@{ 
    public class Person 
    { 
     //etc... 
    } 

    var p = new Person(); 
} 

<span>@p.Name</span> 

Tuy nhiên tôi không thể. . tại sao?

lưu ý: hiện tại là C#, ASP.net người mới bắt đầu.

+1

Đó là [giờ mở nguồn] (http://weblogs.asp.net/scottgu/archive/2012/03/27/asp-net-mvc-web-api-razor-and-open-source.aspx) vì vậy bây giờ bạn có thể [tìm hiểu trực tiếp] (http://aspnetwebstack.codeplex.com/)! –

+1

Câu trả lời kỹ thuật là mã xem được đưa vào phần thân phương thức. Và bạn không thể đặt các lớp ở đó. Nhưng tại sao bạn muốn định nghĩa các lớp bên trong một khung nhìn? Nghe có vẻ không rõ ràng. – CodesInChaos

+0

@dtryon awesome !! cảm ơn vì tin tốt :) –

Trả lời

5

Bạn không thể làm điều đó bởi vì Razor đánh dấu được biên soạn thành một chuỗi các câu lệnh bên trong một phương pháp trong lớp được tạo ra có nguồn gốc từ WebViewPage hoặc WebViewPage <TModel>

Câu hỏi quan trọng hơn, mặc dù là lý do tại sao bạn có muốn làm điều này không? Thay vào đó, muốn giữ Razor miễn phí đối với loại logic này - đó là công việc nên tạo bố cục, không làm bất kỳ loại logic nghiệp vụ nào hoặc chuyển đổi dữ liệu nghiệp vụ. Làm tất cả việc nâng vật nặng trong phương thức hành động của bạn và cung cấp Mô hình mô tả dữ liệu cần thiết để hiển thị bố cục theo định dạng chỉ yêu cầu đánh dấu Razor đơn giản để xử lý.

Có một vài hướng dẫn mô tả cách tiếp cận MVC và Razor. Tôi đào cái này ngắn gọn nhưng có một công việc hợp lý bao gồm một câu chuyện đầu cuối có thể giúp bạn có được ý tưởng. Nó bao gồm việc sử dụng EF để lấy dữ liệu mà bạn có thể thương lượng hơn - nhưng bạn nên đọc để có được bức tranh đầy đủ về cách toàn bộ kiến ​​trúc gắn kết với nhau: http://weblogs.asp.net/shijuvarghese/archive/2011/01/06/developing-web-apps-using-asp-net-mvc-3-razor-and-ef-code-first-part-1.aspx

5

Có, Chế độ xem là các lớp. Chúng được biên dịch thành một hội đồng tạm thời (vì vậy chúng không có quyền truy cập vào các thành viên nội bộ của hội đồng chính, điều này là tốt để biết khi giao dịch với các kiểu động/ẩn danh).

Tôi nghĩ rằng Razor có quy tắc không cho phép khai báo lớp bên trong, chưa chọn.

11

Chắc chắn, bạn cần phải sử dụng các từ khóa functions để thả xuống để lộ những thứ đẳng cấp độ như các lĩnh vực, tài sản, phương pháp, và các loại nội:

@functions { 
    public class Person 
    { 
     public string Name { get; set; } 
    } 
} 

@{ 
    var p = new Person(); 
} 

<span>@p.Name</span> 

này sẽ chỉ làm việc tốt.

Điều đó đang được nói, hãy nhớ rằng mục đích duy nhất của các lớp bên trong này là nếu bạn cần xác định loại chỉ để sử dụng trong chế độ xem. Bản thân tôi, tôi chưa bao giờ tìm thấy một nhu cầu để làm điều này cho các lớp học.Tuy nhiên, tôi đã tận dụng kỹ thuật này để thêm các phương thức mới không có khả năng cú pháp với các phương thức helper.

+0

whoa! không bao giờ thấy từ khóa 'chức năng' trước đây. Nó biên dịch! thanks :) –

+4

@JanCarloViray Vui lòng cân nhắc chuyển câu trả lời đã chọn thành câu trả lời này. – CodeAngry

+1

@JanCarloViray vui lòng lưu ý đề xuất của CodeAngry. –

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