6

Tôi có một phần xem và int nó, không có dấu vết của bất kỳ thừa kế từ bất kỳ bố trí. Nhưng bất cứ khi nào tôi muốn sử dụng nó (hiển thị nó) bên trong một khung nhìn, bố cục được lặp lại một lần cho khung nhìn và một lần cho khung nhìn một phần. This post đề xuất tạo bố cục trống. Nhưng tôi nghĩ đây là cách giải quyết. Có cách nào để dừng bố cục tải (bố cục chính) cho các giao diện một phần. Tôi không hiểu, tại sao khi không có mã để sử dụng bố cục chính, tại sao nó lại được tải. Nó giống như việc tạo một trang trong ASP.NET và thấy rằng nó kế thừa từ một trang cái mà không có chỉ thị <%@ Master ....Một phần xem kế thừa từ bố cục chính

Đây là xem một phần của tôi:

@* Recursive category rendering *@ 
@using Backend.Models; 

@{ 
    List<Category> categories = new ThoughtResultsEntities().Categories.ToList(); 
    int level = 1; 
} 

@RenderCategoriesDropDown(categories, level) 

@helper RenderCategoriesDropDown(List<Category> categories, int level) 
{ 
    List<Category> rootCategories = categories.Where(c => c.ParentId == null).ToList(); 
    <select id='categoriesList' name='categoriesList'> 
    @foreach (Category rootCategory in rootCategories) 
    { 
     <option value='@rootCategory.Id' class='level-1'>@rootCategory.Title</option> 
     @RenderChildCategories(categories, level, rootCategory.Id); 
    } 
    </select> 
} 

@helper RenderChildCategories(List<Category> categories, int level, int parentCategoryId) 
{ 
    string padding = string.Empty; 
    level++; 
    List<Category> childCategories = categories.Where(c => c.ParentId == parentCategoryId).ToList(); 
    foreach (Category childCategory in childCategories) 
    { 
      <option value='@childCategory.Id' class='[email protected]'>@padding.PadRight(level, '-') @childCategory.Title</option> 
      @RenderChildCategories(categories, level, childCategory.Id); 
    } 
    level--; 
} 
+0

u có thể hiển thị dòng đầu tiên của trang một phần và phương thức hành động điều khiển của bạn không? –

Trả lời

13

Tôi đã có thể tạo lại vấn đề này khi hiển thị các trang một phần thông qua ajax cal ls.

return View("partialpage") 

sẽ luôn đi kèm với bố cục. Tôi đã ghi đè hành vi này bằng cách gọi một cách rõ ràng

return PartialView("partialpage") 
+0

Thực hành tốt. Tôi không biết rằng PartialView là một trong các loại ActionResult. Nhưng những gì bạn làm khi bạn không làm việc với ajax và bạn muốn xây dựng trang của mình dựa trên việc đặt cùng một số chế độ xem một phần (giống như trang tổng quan). Phương pháp nào? –

+1

tôi sử dụng RenderPartial hoặc RenderAction tùy thuộc vào sự sẵn có của mô hình –

9

Cách bố trí có thể đến từ bạn ~/Views/_ViewStart.cshtml

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Bạn có thể thử trọng này theo quan điểm của một phần của bạn như:

@{ 
    Layout = null; 
} 
+0

Điều này làm việc cho tôi. Cảm ơn bạn. Nhưng nó có lạ không? Trong WebForms nó giống như luôn luôn nói rằng "trang này không có một trang chủ", hoặc "điều khiển người dùng này không có một trang chủ". Ý tôi là, dường như giá trị mặc định phải là 'Bố cục = null;' và không cần thiết phải nói rõ ràng. –

+0

Công cụ xem WebForms sử dụng các phần mở rộng tệp khác nhau (.ascx cho partials, .aspx cho các trang). Dao cạo, mặt khác sử dụng phần mở rộng tương tự cho tất cả mọi thứ, vì vậy mà có thể là lý do (không phải là 100% chắc chắn về điều này mặc dù). Bằng cách này tôi không thể tái tạo vấn đề của bạn. Làm thế nào bạn gọi một phần của bạn? Tôi đã thử với @ Html.Partial ("_ Foo") và nó chỉ hoạt động. Không cần thiết lập Layout thành null. –

+1

Tôi đã sử dụng '@ Html.Action (" PartialViewControllerAction ")'. Tài liệu phương pháp nói rằng nó trả về kết quả trả về của việc thực hiện xem một phần. –

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