2012-06-22 27 views
5

Tôi có một bộ điều khiển gọi chế độ xem. Trong chế độ xem có một chế độ xem một phần, được chèn như thế này:Không thể truy cập ViewData ở chế độ xem từng phần trong ASP.NET MVC3

@{ Html.RenderPartial("PartialViewName", this.Model);} 

Điều này làm việc tốt.

Nhưng trong bộ điều khiển, tôi muốn đặt thứ gì đó trong ViewData hoặc ViewBag mà tôi sẽ sử dụng trong chế độ xem từng phần. Tôi có thể làm cái này như thế nào?

+0

Bạn muốn sử dụng ViewBag trong một phần của bạn, hoặc sử dụng ViewBag như mô hình trong bạn một phần? –

+0

Tại sao dữ liệu bạn cần tiêu thụ không được xác định trong mô hình bạn đang chuyển sang chế độ xem một phần? (đó là những gì mà tham số thứ hai cho, sau khi tất cả) sau khi tất cả) –

+0

@Mateusz Rogulski Tôi muốn nhận được giá trị của ViewBag trong một phần của tôi – Victor

Trả lời

4

Cả hai Html.Partial và Html.RenderPartial đều có quá tải chấp nhận ViewDataDictionary. Bạn có thể tạo một cái mới hoặc chỉ cần chuyển cái hiện có.

@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });} 

hoặc

@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);} 

Tôi ViewBag khá chắc chắn có thể truy cập đến một phần của bạn mà không cần phải thông qua bất kỳ thông số.

EDIT:

ViewBag và ViewData chắc chắn có sẵn cho cả hai partials và biên tập viên/hiển thị các mẫu. Bạn có thể chỉnh sửa chúng theo quan điểm của mình trước một cái nhìn trực thuộc truy cập chúng như thế này:

@{ ViewBag.MyNewValue = "..."; } 
@Html.Partial("_MyPartial", Model) 

Sau đó, trong một phần của bạn:

@{ string myString = ViewBag.MyNewValue; } 
2

Bạn có thể làm điều đó bằng cách đơn giản nhất.

Chỉ cần đặt Viewbag.sth = value; trong bộ điều khiển của bạn.

và sử dụng một phần của bạn @ViewBag.sth

6

Bạn sẽ có thể làm được điều này tốt. View Bag và View Data có sẵn trong suốt toàn bộ vòng đời của phương thức Action vì vậy nếu bạn thêm một mục để xem dữ liệu trong phương thức điều khiển nhận được khung nhìn, bất kỳ partials tiếp theo nào được hiển thị trên khung nhìn đó sẽ có quyền truy cập vào dữ liệu khung nhìn . Cú pháp để nhận giá trị từ dữ liệu chế độ xem trong chế độ xem một phần của bạn rất dễ dàng. Ví dụ:

@{ 
     var variable = ViewData["My Key"]; 
    } 
2

Như những người khác đã nói, miễn là bạn chỉ định giá trị ViewBag trong phương thức hành động, bạn sẽ có thể truy cập vào chế độ xem một phần.

Ngoài ra, bạn sẽ có thể làm cho khối một phần như thế này:

@Html.Partial("PartialViewName", Model) 

thay vì điều này

@{ Html.RenderPartial("PartialViewName", this.Model);}. 
Các vấn đề liên quan