2013-06-07 19 views
6

Tôi đang sử dụng MVC4 và Dao cạo và muốn xác định Kiểu mẫu từ trong chế độ xem. Điều này phải dễ dàng nhưng tôi không thể có được cú pháp chính xác.Nhận loại Mô hình trong MVC Xem

Tôi muốn làm điều này vì vậy tôi có điều kiện có thể hiển thị đánh dấu khác nhau trong _Layout.cshtml trang tùy thuộc vào giao diện hiện tại và mô hình mà nó đang được sử dụng trong

Nó phải là (tôi nghĩ) một cái gì đó dọc theo dòng của.:

@if (Model.GetType() == Web.Models.AccommodationModel) { // Obviously not correct 
     <h1>Accomodation markup here</h1> 
} 

Mọi đề xuất được đánh giá cao!

Trả lời

12

Bạn có thể sử dụng is keyword:

@if (Model is Web.Models.AccommodationModel) { 
    <h1>Accomodation markup here</h1> 
} 

hay còn (xấu hơn):

@if (Model.GetType() == typeof(Web.Models.AccommodationModel)) { 
    <h1>Accomodation markup here</h1> 
} 
+0

Cảm ơn các bạn, và chỉ để cứu mặt, tôi * chắc chắn * Tôi đã thử phương pháp thứ hai mà bạn đề xuất ở trên và nó không hoạt động. Tôi đã thử lại lần nữa và nó hoạt động! Phải là một lỗi đánh máy hay gì đó. Dù sao cảm ơn v nhiều. – WheretheresaWill

4

Mặc dù bạn đã có một câu trả lời tôi sẽ đề nghị bạn phải suy nghĩ lại toàn bộ khái niệm.

Điều bạn đang làm ở đây là ghép nối bố cục chung với một số chế độ xem cụ thể. Những lượt xem đó có thể thay đổi trong tương lai đòi hỏi bạn phải thay đổi bố cục, có thể ngày càng nhiều người trong số họ hoặc một số sẽ bị xóa. Vì vậy, cách tiếp cận của bạn phá vỡ Nguyên tắc trách nhiệm duy nhất: Threre rõ ràng là nhiều hơn một lý do để thay đổi _layout.cshtml.

Điều gì về việc chèn @section SomeSection { <h1>markup</h1> } vào chế độ xem yêu cầu mã bổ sung đó và hiển thị mã trong bố cục bằng cách sử dụng @RenderSection("SomeSection"), cũng có thể kiểm tra @if(IsSectionDefined("SomeSection")) ở nơi bạn muốn?

+0

Có điểm công bằng. Tôi cũng sẽ xem xét sử dụng phương pháp này. Đó là nhiều hơn cho một sửa chữa nhanh chóng cho các nội dung của một phương thức được tổ chức trong '_Layout', nhưng vẫn là một điểm tốt - cảm ơn. – WheretheresaWill