Pregunta

Debido a la confusión entre toda la información que está ahí fuera sobre MVC de todas las versiones preliminares y el lanzamiento oficial Estoy muy confundido cómo tratar con viewusercontrols. Así que una vez por todas, dime cómo implementar este ejemplo:

Tengo una lista de los próximos eventos que se debe mostrar en varias páginas de mi sitio web. Por lo tanto he puesto un nuevo ViewUserControl (ListEvents.ascx) dentro de mi Vistas \ carpeta compartida.

Estoy solicitando esta ListEvents.ascx para rendir en mi Home / Índice de vista de esta manera:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>

¿Cómo hago para pasar mi modelo a este ViewUserControl? Sé que puedo hacer esto:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

Pero eso no parece como una cosa muy elegante a hacer, la creación de un nuevo modelo desde el interior de una vista ?! O estoy mal aquí? Ni siquiera puede pasar cualquier validationstate, por lo tanto, el parámetro nulo. Así que una opción alternativa es almacenar estos datos en el miembro ViewData [], pero mi ViewUserControl no se supone que es dependiente de la ViewData de su padre!

Estoy seguro de que hay una respuesta muy simple para esto, por favor, comparta como he terminado navegar por la web para este problema.

Gracias!

respuesta simple : Un ViewUserControl debe recibir siempre es el modelo de la vista en la que reside. Trabajando en torno a este, al igual que mediante la adición de un archivo de código subyacente a un ViewUserControl, se rompería el patrón MVC.

¿Fue útil?

Solución

Por defecto, se utilizará el mismo modelo que la página. Si desea proporcionar un modelo para cada instancia de RenderPartial, su situación es, probablemente, al igual que la prestación de varias entradas en una aplicación de blog. Se podía ir a buscar cada modelo de una colección en su modelo de página y pasarlo al control de usuario como esto:

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top