tutorial net mvc español ejemplo create asp c# .net asp.net-mvc

c# - español - asp.net MVC RC1 RenderPartial ViewDataDictionary



mvc c# (5)

Estoy tratando de pasar un objeto ViewData desde una página maestra a un control de usuario de vista usando ViewDataDictionary .

El problema es que ViewDataDictionary no devuelve ningún valor en el control de usuario de la vista, de cualquier forma 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 .

A continuación está el método de ayuda de RenderPartial 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 de usuario hago lo siguiente:

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

¿Por qué esto no devuelve nada?

Gracias por tu ayuda.

EDITAR:

Puedo pasar y acceder al modelo fuertemente tipado sin ningún problema. es el ViewDataDictionary que intento usar para pasar, digamos, un solo valor fuera del modelo ...


En su vista principal:

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

Ya sea en tu controlador o en tu vista principal:

ViewData["Test"] = "Mark";

Si no especifica un modelo o ve el diccionario de datos en RenderPartail, usa los de la vista que lo contiene.


Has probado:

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

¿También ha verificado que ViewData ["Test"] está en ViewData antes de que usted lo pase? También tenga en cuenta que al pasar su ViewData a un control parcial, es importante mantener el mismo modelo.

Mella


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 al hacer referencia al valor en su vista parcial:

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

Eso parece haber hecho el truco para mí. También funcionará si solo haces esto:

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

Espero que esto ayude.


No sé si a alguien le importa pero utilicé un 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 puedes escribir todo en una declaración. Se puede acceder a los KVP en la vista por:

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

Mientras que lo que pasé por el modelo se puede acceder a través del Modelo. *


Esta es la mejor manera que he visto para hacer esto:

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

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