2012-11-16 18 views
9

Ho una vista fortemente tipizzata associata a un oggetto che contiene una raccolta (elenco) di alcuni oggetti. So che Razor viene eseguito sul lato server quando sta generando la pagina, mentre le variabili Javascript non vengono istanziate fino a quando non viene visualizzata la pagina ... ma sarebbe in qualche modo possibile convertire il modello (che la vista è destinata a) o uno dei suoi campi su JSON in Razor senza ricorrere a una chiamata AJAX per recuperare i dati in seguito?Assegnazione del modello a una variabile Javascript in Rasoio

Sai, qualcosa di simile ...

var myJavascriptVariable = @Model.MyCollection 

dove @Model.MyCollection è una lista di alcuni oggetti.

Grazie

+1

Hai provato qualcosa di simile a 'var modelToJson = @ Html.Raw (JSON. Encode (Model)); '? –

risposta

29

Per ottenere i dati JSON è possibile utilizzare la seguente costruzione:

var jsData = @Html.Raw(Json.Encode(Model.MyCollection)); 
+0

Grazie mille per questa risposta .... – Scorpio

4

Prova questa, con questo si può avere il javascript non invadente:

HTML (Razor):

<script id="data" type="text/data-template"> 
@Html.Raw(Json.Encode(Model.MyCollection)) 
</script> 

JS (è possibile utilizzarlo in un file esterno):

var 
    jsonString = $('#data').html(), 
    jsonValue = (new Function("return(" + jsonString + ");"))(); 

Example

HTML:

<script id="data" type="text/data-template"> 
    { 'name': 'Pedro', 'Age': 33} 
</script> 
<div id="result"></div> 

JS

var 
    jsonString = $('#data').html(), 
    jsonValue = (new Function("return(" + jsonString + ");"))(); 

$('#result').html(jsonValue.name); 

Problemi correlati