2013-03-20 16 views
5

Czy jest możliwe użycie ustawienia web.config, takiego jak "serverPath" poniżej w pliku JavaScript w projekcie Razor MVC4 ASP.NET?Jak zaktualizować JavaScript o wartość z pliku web.config w projekcie Razor MVC4 ASP.NET?

<appSettings> 
    <add key="serverPath" value="http://myserver" /> 
</appSettings> 

chciałbym zmienić adres URL następujący jQuery wywołanie ajax w zależności od trybu debugowania lub zwolnij

var request = $.ajax({ 
    url: 'http://myserver/api/cases', 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
    }); 

Czy jest możliwe aby odczytać wartość z pliku web.config jak Widok i zastąpić go w pliku .js?

+0

Czy któryś z odpowiedziami pomóc? –

Odpowiedz

5

Alternatywą jest posiadanie pliku js, który ntains konfiguracja w taki sposób, że robi dla web.config witryny .net internetowej:

configuration.js:

var configuration = { 
    apiurl: 'http://myserver/api/', 
    someOtherSetting: 'my-value' 
}; 

dobrze, może albo napisać tę konfigurację do swojej strony jako javascript lub odnośnik do skryptu lub scalić i zminimalizować do wspólnego pliku. Stanie się częścią twojego procesu wdrażania.

następnie użyć go jak każdy obiekt JS:

var request = $.ajax({ 
    url: configuration.apiurl, 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
}); 

Albo jakiś wariant.

+0

Podczas gdy to by działało, wolałbym scentralizować wszystkie moje informacje konfiguracyjne w pliku web.config, który może automatycznie mieć różne konfiguracje dla trybów debugowania i wydania. – ChrisP

+0

Aby umożliwić wybór innej wersji dla różnych trybów konfiguracji (debug/release/etc), możesz mieć ustawienie web.config "configurationFileName" i przełączać się pomiędzy config.debug.js i configuraiton.release.js jako wartość appSetting. Następnie użyj tej wartości, aby dynamicznie wybrać ścieżkę statycznego pliku JS. – Arkaine55

+0

To z pewnością opcja @ Arkaine55. Dla naszego scenariusza zautomatyzowanej kompilacji mamy szablony skonfigurowane do tworzenia poprawnego pliku konfiguracyjnego. To * ma * sens, żeby jakoś dostać się do różnych wersji tego pliku :) –

1

Jasne, użyj w widoku:

@ConfigurationManager.AppSettings["serverPath"] 

Za przejazdem do zewnętrznego js plik potrzebny funkcji, aby mieć parametr i wywołać ją za pośrednictwem widzenia:

<script type="text/javascript"> 
    getData('@ConfigurationManager.AppSettings["serverPath"]'); 
</script> 

When plik js ma coś takiego:

function getData(path) { 
    var request = $.ajax({ 
     url: path, 
     type: 'GET', 
     cache: false, 
     dataType: 'json' 
    }); 

    return request; 
} 
0

Spróbuj tego:

var request = $.ajax({ 
    url: '@(ConfigurationManager.AppSettings["serverPath"])', 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
    }); 
+0

Ponieważ JavaScript jest w osobnym pliku .js połączonym z widokiem, wygląda na to, że to nie działa. Program @ConfigurationManager ... nadal znajduje się na renderowanej stronie. – ChrisP

1

Najlepiej, byś odczytać wartość w kontrolerze:

var serverPath = ConfigurationManager.AppSettings.Get("serverPath"); 

Następnie ustaw właściwość widoku modelu z tą wartością

myViewModel.ServerPath = serverPath; 
return View(myViewModel); 

I widok po prostu karmić go do JS:

var request = $.ajax({ 
    url: '@(Model.ServerPath)', 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
    }); 
+0

To samodzielny plik JavaScript, który jest połączony z widokiem, więc JavaScript nie jest w widoku. Nie sądzę, aby w pliku .js był dostępny mod, ale nie jestem pewien. – ChrisP

+0

W takim przypadku użyjesz podejścia Linusa i przekażesz je do metody znajdującej się w twoim pliku JS: getData ('@ Model.ServerPath "); –

0

Można to zrobić dla ASP.NET MVC4 Razor ten sposób:

@{ 
    var apiBaseUrl = ConfigurationManager.AppSettings.Get("ApiBaseUrl"); 
} 

<script type="text/javascript"> 
    $(document).ready(function() { 

     var request = $.ajax({ 
      url: '@apiBaseUrl/cases', 
      type: 'GET', 
      cache: false, 
      dataType: 'json' 
     }); 

    }); 
</script> 
Powiązane problemy