2011-01-16 7 views
1

zum ersten Mal mit Asp.Net MVC hier.
Ich habe eine Modellklasse mit 3 Eigenschaften definiert und möchte auf dieses Modell von Javascript-Code auf der Ansicht zugreifen.Schreiben Sie das Modell als Objekt in Javascript

Das Beste, was ich fand, war this page Es würde mir erlauben, so etwas zu tun:

<script> 
var model = <%= Model.ToJson() %> 
alert(model.Prop1); 
</script> 

Da dieser Code auf einem Artikel aus dem Jahr 2007 basiert ich mich gefragt, ob es einen besseren Weg, dies zu tun .

Danke!

+0

Ich würde vermuten, dass, wenn es War irgendetwas ernsthaft falsch mit diesem Ansatz, dann hätten Sie viele Alternativen gefunden. Ich denke, die Tatsache ist, dass die meisten Menschen nicht die Notwendigkeit finden, das gesamte Modell auf das Client-Javascript zu drücken, ich bin mir nicht sicher, ob ich mir einen Grund vorstellen kann, um ehrlich zu sein. Was Ihre Untersuchung hier antreibt, wäre es interessant, Ihr Ziel zu erfahren. – Lazarus

+0

Die Daten meiner Seite werden regelmäßig mit AJAX mit zeitlich befristeten Anfragen von JSON aktualisiert, aber ich dachte, dass ich die Anfangsdaten mit Javascript rendern könnte, indem ich den JSON direkt als Var auf der Seite habe, so dass es nicht nötig ist Warten Sie, bis ein AJAX-Rückruf beginnt, die Seite zu füllen. – pauloya

Antwort

2

Ja, das ist ein sehr guter Weg, dies zu erreichen. Es verwendet JavaScriptSerializer, um Ihr Modell in ein JSON-Objekt zu serialisieren und ein ordnungsgemäßes Escaping sicherzustellen.

Als Alternative, wenn Sie mit AJAX Sie direkt eine Controller-Aktion Rückkehr JSON haben könnte:

public ActionResult Foo() 
{ 
    var model = FetchTheModel(); 
    return Json(model, JsonRequestBehavior.AllowGet); 
} 

und dann mit Jquery verbrauchen diese Aktion:

$.getJSON('<%= Html.Action("Foo") %>', function(result) { 
    alert(result.Prop1); 
}); 
+1

Irgendein Grund für den Downvote? Bitte hinterlassen Sie einen Kommentar beim Downvooten. –

+0

Ich habe nicht downvote, aber afaik JavascriptSerializer ist entzogen, und Sie sollten stattdessen DataContractSerializer verwenden ... Ich bin kein C# Guru tho –

+0

@Martin, JavaScriptSerializer ist nicht veraltet. Ich weiß nicht wo du das gelesen hast. Das gerade veröffentlichte ASP.NET MVC 3-Framework verwendet es, um JSON zu generieren. Tatsächlich wurde es in .NET 3.5 zeitlich veraltet und in .NET 3.5 SP1 zurückgenommen. Es ist völlig in Ordnung. –

Verwandte Themen