La risposta breve è no non è incompatibile con MVC. In effetti aiuta.
La tua vista può essere composta di dati correlati e non correlati. Ci sono diversi strumenti disponibili per aiutarti a costruire il tuo schermo in modo da applicare il Single Responsibility Principle (SRP) e comprensibile. Ho trovato un buon riepilogo di perché sceglieresti l'uno rispetto all'altro.
Diciamo che stiamo sviluppando un blog. Abbiamo il nostro articolo principale con i commenti sottostanti. In questo caso sarebbe ragionevole utilizzare RenderPartial()
per i commenti. Esempio:
public ActionResult Display(int id)
{
Model = Articles.Find(id);
if (Model == null) return NotFound();
}
Nella vista avresti qualcosa di simile a questo:
<article>
<header>@Model.Title</header>
<div class="blog-content">
@RawHtml(Model.Content)
</div>
<div class="blog-comments>
@foreach(var comment in Model.Comments)
{
RenderPartial("_Comment", comment);
}
</div>
</article>
Fin qui tutto bene. È tutto in quello che ti aspetti. Tuttavia, cosa succede se si desidera elencare le categorie sulla stessa pagina? o forse i primi 5 articoli? Ecco dove useresti RenderAction()
. La logica di ciò che vuoi mostrare non ha nulla a che fare con il contenuto che hai appena impostato. È anche qualcosa che sarebbe meno che desiderabile includere nel metodo Display()
.
<section id="top-five">
@RenderAction("TopFive")
</section>
<section id="categories">
@RenderAction("Categories")
</section>
Ciò consente al framework di inviare la chiamata del metodo di azione allo stack e di rendere i risultati direttamente sullo stesso output. Quando viene eseguito il rendering dell'output, il framework si apre su tale contesto per tornare alla pagina principale. Ciò ti consente di incorporare contenuto non correlato nella stessa pagina perché fa bene agli utenti, ma mantiene comunque una base di codice comprensibile.