/ / MVC ASP & Javascript Variablenfreigabe - c #, javascript, asp.net-mvc, Rasierer

MVC ASP & Javascript Variable teilen - c #, javascript, asp.net-mvc, Rasierer

Ich arbeite jetzt schon eine Weile mit MVC(2 Monate) und ich liebe es zum größten Teil. Ich bin auf einige Fälle gestoßen, in denen ich Variablenwerte nicht zwischen Sprachen teilen kann. Zum Beispiel.

In Javascript / Jquery usw. kann ich Cookies setzen. Aber der Server kann sie nicht erreichen.

In C # / Razor kann ich Abfragezeichenfolgen, ViewBags, ViewData, Sessions usw. einstellen. Da dies jedoch serverseitig ist, kann es bei clientseitigem Javascript nicht möglich sein.

Was ich wissen möchte ist, ob es eine vernünftige gibtAuf einfache Weise kann ich eine Variable wie eine Zeichenfolge in C # oder Javascript festlegen und sie entweder vor oder zurück lesen (spielt keine Rolle) in der anderen Sprache (z. B. eine von Javascript gelesene C # -Rasor-Variable oder umgekehrt).

Ich hatte noch keine Notwendigkeit, Json oder XML mit AJax zu verwenden. Aber wenn das helfen würde, würde ich darüber nachdenken. Ich bin neu bei all dem, also bitte verzeihen Sie meine Unwissenheit und danke Ihnen für Ihre Hilfe.

Antworten:

6 für die Antwort № 1

C # -> JS

Fügen Sie Variablen in ausgeblendete Eingabefelder oder Daten- * Attribute ein, und rufen Sie dann einfach Javascript oder jQuery ab, um diese Werte abzurufen.

JS -> C #

Verwenden Sie entweder ajax, um Daten zurückzusenden, oder Sie können die Werte für ausgeblendete Eingaben festlegen und dann einen normalen POST für den Server ausführen.


2 für die Antwort № 2

Wenn versteckte Felder Ihr Problem lösen, dann würde ich sagen, dass dies wahrscheinlich der einfachste Weg ist. Wenn der JS die Daten lesen muss und Sie sie nicht sichtbar machen möchten, sind versteckte Felder sinnvoll.

Ich hatte jedoch das Bedürfnis, einiges zu habenkomplexe Datenelemente, die beispielsweise aus einem DB stammen, die auf bestimmte Weise in JS initialisiert werden müssen, beispielsweise ein Ereigniskalender. Die Ereignisdaten werden aus einer DB gelesen, müssen es aber irgendwie in JS-Datenzuweisungen machen.

Ich fand den direktesten Weg zu @ HTML.Raw ("was auch immer Sie brauchen") in einer Schleife in der Ansicht, so dass die Ansicht Javascript ausgibt - klingt klunky, aber ich verwende es nur für die dynamische Datenausgabe. Möglicherweise gibt es einen saubereren Weg (gerne Vorschläge lesen), aber es ist eine Option für eine komplexere Datenlieferung an JS.

Die Daten werden übrigens wieder an den Server gesendet, da die URLs dazu mit Querystrings erstellt wurden (nur für Suchdaten, wenn die Sicherheitsbedenken gering sind).


2 für die Antwort № 3

Es gibt eine weitere Lösung. Sie können NewtonsoftJson verwenden, um das gesamte Modell oder nur einen Teil des Modells oder eine beliebige andere Servervariable in ein Json-Objekt zu serialisieren:

Javascript & Rasierer:

var model = @Html.Raw(JsonConvert.SerializeObject(Model))

Das Problem ist, dass Sie bei diesem Ansatz wahrscheinlich einen Syntaxfehler aufgrund der Dummheit von VS2012 und Resharper erhalten. Es gibt jedoch einige Tricks: Rasiermesser / JavaScript und abschließendes Semikolon.


1 für die Antwort № 4

Wenn es kompliziert ist, möchten Sie vielleicht einen Blick auf KnockoutJs.com werfen - es übernimmt die Serialisierung des Viewmodels von und zu Javascript und nimmt Ihnen viel Arbeit ab.