Erreur de syntaxe Razor lors de la sérialisation du modèle ASP.NET en JSON avec Html.Raw

Cette ligne me donne une erreur de syntaxe dans Visual Studio 2012 (littéralement “Erreur de syntaxe”):

var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)); 

Model dans ce cas est l’instance de @model MyApp.ViewModels.MyViewModel déclarée en haut de mon cshtml.

Mon modèle est sérialisé correctement dans la variable data et l’application fonctionne correctement. Sur le plan cosmétique, il est simplement ennuyeux d’avoir l’erreur en permanence dans ma liste d’erreurs.

Comment dois-je modifier la ligne pour que le compilateur soit heureux?

modifier:

Comme demandé, plus de contexte. Voici l’intégralité du $(document).ready() :

  $(document).ready(function () { $('#ReportDate').datepicker(); $('#DispositionDate').datepicker(); var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)); var vm = new NonconformingProductViewModel(data); ko.applyBindingsWithValidation(vm); // validate on page load so all reqd fields are highlighted. var valid = ko.validation.group(vm, {deep: true}); valid.showAllMessages(true); }); // end document.ready  

En utilisant la fonction

Implémentez une simple fonction JavaScript set qui renvoie un argument d’entrée:

 function set(value){ return value; } 

Utilisez cette fonction pour affecter la valeur du modèle Razor à une variable JavaScript:

 var data = set(@Json.Encode(Model)); 

En option, vous pouvez utiliser la fonction d’appel automatique:

 var data = function() { return set(@Json.Encode(Model)); }(); 

Essayez de l’envelopper dans une function comme suit:

 var data = function() { return @Html.Raw(Json.Encode(Model)); }(); 

Utilisez JSON.Net , au lieu de JavaScriptSerializer ou DataContractJsonSerializer, pour éviter le cauchemar que sont les dates JSON :

 var data = function () { return @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); }(); 

Encore plus facile !! Cela corrigera ce petit ennui:

 var model = [@Html.Raw(Json.Encode(Model))][0]; 

Fondamentalement, intellisense veut quelque chose autour de @Html.Raw . En réalité, il n’ya rien qui cloche, mais nous devons nous occuper de la lacune intellisense. Ici, nous déclarons le résultat en tant que premier index d’un nouveau tableau, puis renvoyons le premier index.

FYI: Si vous voulez que votre modèle reflète les modifications apscopes au DOM, essayez la classe JSModel .

Vous n’avez pas besoin d’écrire de nouvelles fonctions javascript, mettez simplement le code entre crochets

 var data = (@Html.Raw(Json.Encode(Model))); 

fonctionne pour moi dans Visual Studio 2015, pas sûr de VS2012