ASP.Net MVC ViewUserControl con il regolatore usando MVC 1.0
-
23-08-2019 - |
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.
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);
}