Je convertis un objet en JSON avec JavaScriptSerializer
et je peux voir cette sortie JSON dans le code serveur:
[{"UserId":1,"UserName":"Admin"}]
Mais dans l'interface utilisateur, il se convertit à quelque chose comme ci-dessous
[{"UserId":1,"UserName":"Admin"}].
Comment échapper à ces "
?
Si vous utilisez le moteur de vue Razor, vous devez utiliser la méthode Html.Raw
:
<script type="text/javascript">
var model = @Html.Raw(Json.Encode(Model));
</script>
Notez l'utilisation de la méthode Json.Encode
qui est plus courte et équivalente à new JavaScriptSerializer().Serialize()
.
Pourquoi faites-vous cela? Pourquoi ne pas simplement retourner un JsonResult
?
public ActionResult MyMethod()
{
List<ListItem> list = new List<ListItem>() {
new ListItem() { UserId = "1", UserName = "Admin" },
new ListItem() { UserId = "2", UserName = "JohnDoe" },
new ListItem() { UserId = "3", UserName = "JaneDoe" }};
return this.Json(list);
}
Juste une dernière chose sur la réponse de Darin Dimitrov. Dans mon VS2012, il y a une erreur de compilation avec le point-virgule, car l'instruction du côté JS est en fait "var model =;" . Un moyen d'utiliser une paire de guillemets pour envelopper la partie Razor comme ceci:
var model = "@Html.Raw(Json.Encode(Model))";
Cela ne causera aucune erreur.
Json.Encode () semble être une fonction wrapper de JavaScriptSerializer. Je ne sais pas si ce dernier est plus efficace.