2009-01-30 32 views
20

Tôi đang cố gắng chuyển đối tượng ViewData từ trang chính tới điều khiển người dùng chế độ xem bằng cách sử dụng ViewDataDictionary.asp.net MVC RC1 RenderPartial ViewDataDictionary

Sự cố là ViewDataDictionary không trả lại bất kỳ giá trị nào trong chế độ xem của người dùng theo bất kỳ cách nào tôi thử.

Mã mẫu bên dưới đang sử dụng một đối tượng ẩn danh chỉ để trình diễn mặc dù không phải phương pháp này hoặc chuyển một đối tượng ViewData hoạt động.

Sau đây là phương pháp RenderPartial helper Tôi đang cố gắng để sử dụng:

<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %> 

và điều khiển người dùng quan điểm của tôi tôi làm như sau:

<%= Html.Encode(ViewData["Test"]) %> 

Tại sao điều này không quay trở lại bất cứ điều gì?

Cảm ơn sự giúp đỡ của bạn.

EDIT:

Tôi có thể chuyển và truy cập vào kiểu được nhập mạnh mà không gặp bất kỳ sự cố nào. đó là ViewDataDictionary mà tôi đang cố gắng sử dụng để vượt qua nói chỉ là một giá trị duy nhất bên ngoài của mô hình ...

Trả lời

5

Các bạn đã thử:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData); %> 

Cũng có bạn xác nhận ViewData [ "Test"] là trong ViewData trước khi bạn truyền nó? Cũng lưu ý rằng khi chuyển ViewData của bạn sang một phần Control thì điều quan trọng là giữ cho Model giống nhau.

Nick

+0

Cảm ơn nhưng tôi có thể chuyển mô hình mà không gặp bất kỳ sự cố nào. đó là ViewDataDictionary mà tôi đang cố gắng sử dụng để vượt qua nói chỉ là một giá trị duy nhất bên ngoài của mô hình .. – Mark79

1

Trong giao diện chính của bạn:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData["Projects"]); %> 

Hoặc trong bạn điều khiển hoặc giao diện chính của bạn:

ViewData["Test"] = "Mark"; 

Nếu bạn không chỉ định một từ điển mô hình hoặc xem dữ liệu trong RenderPartail, nó sử dụng những cái từ khung nhìn có chứa.

5

Tôi đang sử dụng phiên bản RTM của ASP.Net MVC, nhưng với:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new ViewDataDictionary(new {Key = "Some value"})); %> 

Hãy thử những điều sau khi tham khảo giá trị theo quan điểm từng phần của bạn:

<%= ViewData.Eval("Key") %> 

Đó dường như có thực hiện các trick cho tôi. Nó cũng sẽ hoạt động nếu bạn chỉ làm điều này:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new {Key = "Some value"}); %> 

Hy vọng điều này sẽ hữu ích.

10

Không biết nếu có ai vẫn quan tâm nhưng tôi đã sử dụng KeyValuePair cho ViewDataDictionary.

<% Html.RenderPartial("ItemRow", item, new ViewDataDictionary{ 
     new KeyValuePair<string, object>("url", url), 
     new KeyValuePair<string, object>("count", count), 
     new KeyValuePair<string, object>("className", className) 
}); %> 

Bằng cách này bạn có thể viết mọi thứ trong một câu.Các KVPs thể được truy cập trong giao diện bằng cách:.

<%= ViewData["url"] %> 
<%= ViewData["count"] %> 
<%= ViewData["className"] %> 

Trong khi những gì tôi trải qua các mô hình có thể được truy cập thông qua mẫu *

33

Đây là cách thú vị nhất tôi đã nhìn thấy để làm điều này:

<% Html.RenderPartial("/Views/Project/Projects.ascx", Model, new ViewDataDictionary{{"key","value"}});%> 

Nó có thể là một chút hackish, nhưng nó cho phép bạn gửi mô hình thông qua VÀ một số dữ liệu bổ sung.

+0

Cảm ơn! Nó hoạt động! –

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