Ich baue derzeit eine einfache Website mit ASP.NET Core 2 und Bootstrap. Die Site wird in einer Staging- und Produktionsumgebung bereitgestellt, sodass ich einige Einstellungen mithilfe von Configuration Key/Value-Paaren konfigurieren kann, die ich in Azure festlegen kann. Ich möchte auch, dass diese Werte mir in Javascript zur Verfügung stehen.Zugriff auf Konfigurationseinstellungen in Javascript mit ASP.NET Core 2 MVC6
Dank dieses helpful blog post habe ich ausgearbeitet, wie man eine AppSettings-Klasse erstellt und sie füllt. In diesem Post wird auch die Abhängigkeitsinjektion zum Zugriff auf AppSettings von einem RazorPage-Modell behandelt.
Meine appsettings.json Datei
{
"AppSettings": {
"TestProperty": "Test_Property"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
automatisch meine AppSettings Klasse in Startup.cs binden
services.Configure<AppSettings>(Configuration.GetSection(nameOf(AppSettings)));
Zugriff auf die Einstellungen über Dependency Injection:
public class HomeModel : PageModel
{
private readonly AppSettings _appSettings;
public string TestProperty {get; set;}
public HomeModel(IOptions<AppSettings> appSettings)
{
_appSettings = appSettings.Value;
}
public IActionResult Index()
{
TestProperty = _appSettings.TestProperty;
return View();
}
}
dann auf der Seite, wo ich diese Eigenschaft in Javascript verwenden mag ich folgendes ein Javascript-Objekt mit der Einstellung zu erstellen:
<script type="text/javascript">
var testProperty = '@Model.TestProperty';
</script>
Das funktioniert aber im Idealfall möchte ich nicht haben Konfigurieren Sie jede Seite, um diese Abhängigkeitsinjektion zu verwenden, und setzen Sie meine TestProperty
auf jeder Seite frei. Ich würde gerne in der Lage sein, den obigen Code in meine _Layout.cshtml
setzen, in dem jeder Körper der Seite gerendert wird (oder woanders angemessen), so dass ich eine Javascript-Variable für die Verwendung auf jeder Seite erstellen kann.
Ich habe über die Verwendung eines BaseViewModels nachgedacht, von dem alle Modelle meiner Seite geerbt werden, aber das Experimentieren mit diesem hat nichts nützliches ergeben (nur eine Ausnahme).
Wie würden Sie eine JavaScript-Eigenschaft aus einer Konfigurationseinstellung erstellen mit der Fähigkeit, nur einmal zu konfigurieren?
Das klingt nach Ritus. Ich würde keine einfachen globalen Variablen verwenden. Stattdessen würde ich einen Namespace-Ansatz verwenden, um ein mögliches Überschreiben globaler Variablenwerte zu vermeiden. Sehen Sie dies für ein Beispiel https://stackoverflow.com/questions/34360537/how-do-i-make-js-know-about-the-application-root/34361168#34361168. Sie können das JS-Objekt übergeben, das Ihre App darstellt die Einstellungen. Sie müssen Html.Raw serialisieren und verwenden, damit Sie das richtige JS-Objekt erhalten. – Shyju
Hallo James, das sieht nützlich aus, können Sie ein wenig mehr Informationen darüber geben, wie Ihre IAppSettings-Schnittstelle und AppSettings-Klasse aussieht? – Sam
@Sam hilft meine Hilfe bearbeiten? –