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>
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)); }();
Essayez de l'envelopper dans un 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 qui est les dates JSON :
var data = function () {
return @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)); }();
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 .
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