Domanda

Sto utilizzando alcune (2 o 3) pagine master nella mia applicazione ASP.NET MVC e ciascuna di esse deve visualizzare bit di informazioni dal database.Ad esempio un elenco di sponsor, lo stato attuale dei finanziamenti, ecc.

Quindi la mia domanda era: dove dovrei inserire il codice di chiamata del database della pagina master?

Normalmente, questi dovrebbero entrare nella propria classe controller, giusto?Ma ciò significherebbe che dovrei collegarli manualmente (ad es.passando ViewDatas) poiché è fuori dal normale framework di routing fornito dal framework MVC.

Esiste un modo per farlo in modo pulito senza collegare manualmente il passaggio/le chiamate di azione ViewData alle pagine master o sottoclassare i framework?

La quantità di documentazione è molto bassa...e sono molto nuovo in tutto questo, compresi i concetti di MVC stesso, quindi per favore condividi i tuoi suggerimenti/tecniche su questo.

È stato utile?

Soluzione

Un modo per farlo è inserire nella visualizzazione della pagina master l'hook per ViewData e quindi definire un BaseController:Controller (o più classi base) in cui esegui tutte le chiamate db di cui hai bisogno.

Quello che vuoi fare è più o meno la stessa cosa descritta in Questo articoli.

Spero che aiuti!

Saluti

Altri suggerimenti

Ottima domanda.Hai diverse opzioni a tua disposizione.

  1. Effettua una chiamata jQuery sulla tua pagina master che acquisisce i dati necessari da un controller e quindi compila i campi utilizzando nuovamente jQuery.
  2. La seconda opzione è creare controlli utente che effettuino le proprie chiamate al controller per popolare le proprie informazioni.

Penso che la scelta migliore sia creare controlli per l'area della tua pagina master che contiene dati che devono essere popolati.Lasciando così che la tua pagina master contenga rigorosamente elementi di design.Buona fortuna.

Se non ti disturbano i dati di visualizzazione fortemente tipizzati, puoi inserire tutti i dati della pagina master in una classe base comune per viewData.È possibile impostare questi dati nel costruttore della classe base.Tutte le tue visualizzazioni che richiedono dati aggiuntivi avranno quindi bisogno di viewdata fortemente tipizzati che ereditano da questa classe base.

Per consentire una chiamata a View() nei tuoi controller senza alcun viewdata esplicito puoi sovrascrivere View nel tuo ControllerBase:

protected override ViewResult View(string viewName, string masterName, object model)
{
    if (model == null)
    {
        model = new ViewDataBase();
    }
    return base.View(viewName, masterName, model);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top