Domanda

A causa della confusione tra tutte le informazioni che è là fuori su MVC da tutte le versioni di anteprima e quello di rilascio ufficiale di Sono molto confuso come affrontare viewusercontrols. Quindi, una volta per tutte, mi dica come implementare questo esempio:

Ho una lista dei prossimi eventi che deve essere visualizzato su diverse pagine del mio sito. Quindi ho messo un nuovo ViewUserControl (ListEvents.ascx) dentro la mia Visualizzazioni \ cartella condivisa.

Chiedo questo ListEvents.ascx per rendere il mio Home / Vista indice in questo modo:

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

Come potrei fare per passare il mio modello di questo ViewUserControl? So che posso fare questo:

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

Ma questo non sembra una cosa molto intelligente da fare, la creazione di un nuovo modello da dentro una vista ?! O mi sbaglio qui? Non posso nemmeno passare qualsiasi validationstate, quindi il parametro nullo. Quindi, un'opzione alternativa è quella di memorizzare questi dati negli Stati Viewdata [], ma la mia ViewUserControl non dovrebbe dipendere dalla Viewdata del suo genitore!

Sono sicuro che ci sia una risposta molto semplice a questo, si prega di condividere come ho finito la navigazione nel web per questo problema.

Grazie!

risposta semplice : Un ViewUserControl dovrebbe ricevere sempre è modello della vista in cui si trova. Lavorando intorno a questo, come con l'aggiunta di un file codebehind a un ViewUserControl, avrebbe rotto il pattern MVC.

È stato utile?

Soluzione

Per impostazione predefinita, verrà utilizzato lo stesso modello come pagina. Se si desidera fornire un modello per ogni istanza di RenderPartial, la vostra situazione è probabilmente come il rendering più voci in un'applicazione blog. Si potrebbe prendere ogni modello da una collezione nel modello di pagina e passare al controllo utente in questo modo:

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top