Non si dovrebbe davvero essere chiamata direttamente da ConfigurationManager
il tuo punto di vista. Le viste dovrebbero essere "stupide" in MVC, ovvero non avere alcuna conoscenza della struttura dati o del back-end, e chiamando lo ConfigurationManager
direttamente la tua vista sa troppo su come le tue impostazioni sono memorizzate. Se hai cambiato le tue impostazioni per utilizzare un negozio diverso (ad esempio un database), allora dovresti cambiare la tua vista.
Quindi, dovresti prendere quel valore altrove e passarlo alla tua vista in modo che la tua vista si occupi solo di renderlo e basta. Probabilmente avete 2 opzioni:
- Aggiungi qualcosa nella ViewBag e afferrarlo nella vista
- Render un'azione da un controller comune che passa un ViewModel fortemente tipizzato ad una visione parziale.
mi piacerebbe scoraggiare l'opzione 1 perché in generale è bene evitare il ViewBag
perché non è fortemente tipizzato (Is using ViewBag in MVC bad?). Inoltre, per fare questo dovresti ereditare da uno BaseController
per ogni controller che può essere doloroso, oppure creare un filtro di azione globale che sovrascrive lo ActionExecuted
e inserisce qualcosa nello ViewBag
lì.
L'opzione 2 è probabilmente migliore. Mi piacerebbe creare un qualcosa di controllo comune come:
public class CommonController : Controller
{
[ChildActionOnly]
public ViewResult Settings()
{
// Get some config settings etc here and make a view model
var model = new SettingsModel { Foo = myProject.Properties.Settings.Default.foo };
return View(model);
}
}
Poi, nel tuo file di layout è possibile chiamare:
@Html.Action("Settings", new { controller = "Common" })
che rende una vista parziale fortemente tipizzato (~/Vista/common/Impostazioni. cshtml) che si presenta come:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
In questo modo si sta ancora utilizzando un modello fortemente tipizzato e vista, la visualizzazione di layout rimane pulito e semplice e la vostra visione parziale resta 'muto'
fonte
2013-04-16 11:55:49
Che ne dici di impostare quella proprietà nel ViewBag (nel Controller) e chiamarla da lì? –
Buona idea, lo proverò – gurehbgui
ma il problema è che questa è la mia pagina _Layout, dove ho il Viewbag? Non lo imposterò in ogni singolo controller che ho – gurehbgui