2011-11-01 25 views
61

Có cách nào hiển thị trong chế độ xem của bộ điều khiển A một góc nhìn từ bộ điều khiển khác B?Hiển thị một phần Chế độ xem từ bộ điều khiển khác

Chỉnh sửa: Tôi đã viết một phần xem chỉ tốt cho hai bộ điều khiển và tôi không muốn sao chép nó vào cả hai thư mục Chế độ xem.
Tôi muốn Chế độ xem từng phần được hiển thị mỗi khi Chế độ xem được hiển thị không sau khi xảy ra sự cố.

+1

Điều này có nghĩa mọi thứ khác nhau. Bạn chỉ muốn tái sử dụng xem (mô hình được tạo ra bởi bộ điều khiển A)? Bạn có muốn gọi hành động điều khiển tạo ra khung nhìn không? Bạn có muốn sử dụng AJAX để tải chế độ xem động sau khi trang được hiển thị không? – tvanfosson

+0

Bạn có thể cụ thể hơn không. Chính xác bạn muốn đạt được điều gì? –

+1

@ Html.Action ("YourPartialViewAction", "ControllerName", mới {id = Model.id}) –

Trả lời

75
  1. Bạn có thể chia sẻ quan điểm giữa các bộ điều khiển bằng cách đặt chúng vào Views/thư mục Shared. Mỗi bộ điều khiển sau đó có thể hiển thị chế độ xem đó theo tên.
  2. Bạn có thể hiển thị chế độ xem một phần (có thể được chia sẻ giữa các bộ điều khiển như trong (1)) trong chế độ xem hiện tại bằng cách sử dụng Html.Partial().
  3. Bạn có thể sử dụng Html.Action() để gọi hành động trên bộ điều khiển khác và hiển thị kết quả trong chế độ xem hiện tại.
  4. Bạn có thể sử dụng AJAX để tải chế độ xem một phần từ bộ điều khiển khác sau khi trang được hiển thị.
+0

Giới thiệu về tùy chọn 3: Tôi có thể gọi trình điều khiển của mình và hiển thị chế độ xem một phần từ bộ điều khiển khác không? mà không sử dụng đường dẫn tương đối Cảm ơn! – gdoron

+0

@gdoron bạn có thể bản địa hóa mã tạo ra một phần khung nhìn trong một hoặc bộ điều khiển khác và bao gồm thông qua 'Html.Action()' cho các khung nhìn trong cả hai bộ điều khiển. – tvanfosson

+5

5.bạn cũng có thể hiển thị chế độ xem dưới dạng xem một phần bằng cách cung cấp đường dẫn đầy đủ như @ Html.Partial ("~/Views/Partials/Location.cshtml", Model) –

17

Vâng,

return PartialView("/path/view.cshtml"); 

Bạn chỉ cần làm việc ra các phần đường.

Hoặc bạn có thể đặt quan điểm một phần trong views/chia sẻ sau đó chỉ cần quay trở lại:

return PartialView("view.cshtml"); 
+1

Tôi không muốn chia sẻ một phần. Và đường dẫn tương đối không hoàn toàn phù hợp với hệ thống định tuyến mvc. Các đề xuất khác? – gdoron

+0

Chỉ là một nghi ngờ nhỏ ở đây. Phương thức PartialView trả về chuỗi được mã hóa HTML hay html thô? – Karan

1
@model YourModelNamesapce.ModelName 
@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_LayoutForPartialViews.cshtml"; 
} 
<table> 
    <tr> 
     <td> 
      @Html.LabelFor(model => model.fieldname) 
     </td> 
     <td> 
      @Html.DisplayFor(model => model.fieldname) 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.Action("PartialViewAction", "Controller", new { id = Model.id })</td> 
    </tr> 
</table> 
+0

Xin lỗi nhưng làm cách nào để trả lời câu hỏi của tôi? – gdoron

+0

gordon, tôi đã cập nhật câu trả lời của mình –

+1

Đây không phải là câu trả lời rất rõ ràng, tuy nhiên Hari chỉ ra rằng DisplayFor là một lựa chọn tốt. – mcfea

44
@Html.Partial("~/Views/ControllerB/Index.cshtml") 
+3

Giải pháp đơn giản nhất. : D – wooncherk

+0

Có thể gọi hành động trên bộ điều khiển thay vì xem trực tiếp không? – FrenkyB

1

Chỉ cần một lưu ý phụ như tôi tìm thấy chủ đề này tìm kiếm cùng một câu hỏi nhưng câu trả lời không có tác dụng: trong module Orchard CMS bạn không thể sử dụng neat solution đăng bởi Pittfall, bạn phải sử dụng đường dẫn tương đối để trả lại một phần lượt xem. Cho phép nói rằng bạn có một bộ điều khiển

Controllers/SiteController.cs 

và bạn muốn quay trở lại quan điểm phần

Shared/MessageList/Items 

sau đó trong phương pháp hành động của bạn, bạn cần phải viết

return PartialView("../Shared/MessageList/Items"); 
Các vấn đề liên quan