Sie sollten nicht wirklich ConfigurationManager
aus direkt aufrufen werden versuchen gespeichert deine Ansicht. Ansichten sollten in MVC "dumm" sein, dh keine Kenntnisse über die Datenstruktur oder das Backend haben, und durch Aufruf von ConfigurationManager
weiß Ihre Ansicht zu viel darüber, wie Ihre Einstellungen gespeichert werden. Wenn Sie Ihre Einstellungen so geändert haben, dass sie einen anderen Speicher (z. B. eine Datenbank) verwenden, müssen Sie Ihre Ansicht ändern.
Also, Sie sollten diesen Wert woanders nehmen und es an Ihre Ansicht übergeben, so dass Ihre Ansicht nur für das Rendern sorgt und das ist es. Sie haben wahrscheinlich zwei Optionen:
- etwas in die ViewBag hinzufügen und es in der
- Render eine Aktion aus einer gemeinsamen Steuerung Ansicht zu ergreifen, die ein stark typisierte Viewmodel auf eine Teilansicht gelangt.
würde ich Option 1 entmutigen, denn in der Regel ist es gut, die ViewBag
zu vermeiden, weil sie nicht stark typisiert ist (Is using ViewBag in MVC bad?). Dazu müßtest du entweder von einem BaseController
für jeden Controller erben, der ein Schmerz sein kann, oder einen globalen Aktionsfilter erstellen, der ActionExecuted
überschreibt und etwas in den ViewBag
steckt.
Option 2 ist wahrscheinlich besser. Ich würde eine gemeinsame Steuerung so etwas wie erstellen:
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);
}
}
Dann in Ihrem Layout-Datei können Sie anrufen:
@Html.Action("Settings", new { controller = "Common" })
, die eine stark typisierte Teilansicht rendert (~/Ansichten/Common/Einstellungen. cshtml), die wie folgt aussieht:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
diese Weise können Sie immer noch eine stark typisierte Modell und Ansicht sehen Sie die Layout-Ansicht bleibt sauber und einfach und Ihre Teilansicht bleibt ‚stumm‘
Wie wäre es, diese Eigenschaft im ViewBag (im Controller) zu setzen und von dort aus aufzurufen? –
Gute Idee, werde es versuchen – gurehbgui
aber das Problem ist, dass dies meine _Layout Seite ist, wo habe ich den Viewbag dafür? Ich werde es nicht in jedem einzelnen Controller setzen, den ich habe – gurehbgui