web-dev-qa-db-fra.com

Erreur de syntaxe de rasoir sérialisant le modèle ASP.NET en JSON avec Html.Raw

Cette ligne me donne une erreur de syntaxe dans Visual Studio 2012 (littéralement juste "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 correctement sérialisé dans la variable de données et l'application fonctionne correctement. Cosmétiquement, c'est juste ennuyeux d'avoir l'erreur en permanence dans ma liste d'erreurs.

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

modifier:

Comme demandé, plus de contexte. Voici la $(document).ready() entière:

<script type="text/javascript">

    $(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

</script>
24
Tom Studee

Utilisation de la fonction

Implémentez une simple fonction JavaScript set qui retourne l'argument d'entrée:

function set(value){
    return value;
}

Utilisez cette fonction pour attribuer une valeur de 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)); }();
27
Andrei

Essayez de l'envelopper dans un function comme suit:

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

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

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

Encore plus facile !! Cela corrigera cette petite gêne:

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

Fondamentalement, intellisense veut quelque chose autour de @Html.Raw. Il n'y a en fait rien de mal mais nous devons gérer la lacune d'intellisense. Ici, nous déclarons le résultat comme le premier index d'un nouveau tableau, puis retournons le premier index.

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

8
Chad Kuehn

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

3
sad_robot