2009-01-30 29 views
20

Estoy tratando de pasar un objeto ViewData desde una página maestra a un control de usuario de vista usando el ViewDataDictionary.asp.net MVC RC1 RenderPartial ViewDataDictionary

El problema es que el ViewDataDictionary no devuelve ningún valor en el control de usuario de la vista, cualquiera sea el modo en que lo intente.

El código de ejemplo siguiente utiliza un objeto anónimo solo para demostración, aunque no funciona ni este método ni pasa un objeto ViewData.

siguiente es el método RenderPartial ayudante que estoy tratando de usar:

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

y en mi opinión, el control del usuario hago lo siguiente:

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

¿Por qué esto no devuelve nada?

Gracias por su ayuda.

EDIT:

soy capaz de pasar y tener acceso al modelo inflexible sin ningún problema. Es la ViewDataDictionary la que estoy tratando de utilizar para pasar dicen que sólo un único valor fuera del modelo ...

Respuesta

5

has necesitado:

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

también tienen que verificó ViewData [ "Test"] es en ViewData antes de que lo pases? También tenga en cuenta que al pasar su ViewData a un control parcial, es importante mantener el mismo modelo.

Nick

+0

Gracias pero puedo pasar el modelo sin ningún problema. es el ViewDataDictionary que intento usar para pasar, digamos, un solo valor fuera del modelo. – Mark79

1

En su vista principal:

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

Ya sea en su controlador o su vista principal:

ViewData["Test"] = "Mark"; 

Si no se especifica un diccionario de modelo o vista de datos en RenderPartail, utiliza los de la vista que contiene.

5

estoy usando la versión RTM de ASP.Net MVC, pero con:

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

Pruebe lo siguiente cuando se hace referencia al valor en su vista parcial:

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

que parece haber hecho el truco para mi También funcionará si solo hace esto:

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

Espero que esto ayude.

10

No sé si a alguien le importa pero utilicé KeyValuePair para 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) 
}); %> 

De esta manera puede escribir todo en una sola declaración.Los KVPS se puede acceder en la vista por:.

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

Si bien lo que pasa a través del modelo se puede acceder a través de Modelo *

33

Ésta es la manera más bonito que he visto hacer esto:

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

Puede ser un poco hackish, pero le permite enviar el modelo a través de Y algunos datos adicionales.

+0

¡Gracias! ¡Funciona! –

Cuestiones relacionadas