none
How can I communicate between Java Script and C# RRS feed

  • Frage

  • Hi,

    I want to pass a two dimensional array from C# to Java Script. I have created a MVC4 Web Project where I parse a text file on the server an pass the data to a java script file to paint something, depending on that data. 

    regards,
    Marko 
    Dienstag, 24. Januar 2012 15:26

Antworten

  • Hallo,

    So funktioniert jetzt die Übertragung auf beide Seiten :-). Danke für die Tipps.

    Client

    var jsonData = '{"measurementType": "diffusionCurrent", "filename": "test" }';
    
    jQuery.ajax({
                type: "POST",
                url: "/Home/Data",
                data: jsonData,
                contentType: "application/json",
                dataType: "json",
                success: function (result) {
                    // some actions with the data
                },
                error: function (error) {
                    alert("There was an error posting the data to the server: " + error.responseText);
                }

    Server

    [AcceptVerbs(HttpVerbs.Post)]
            public JsonResult Data(string measurementType, string filename)
            {
                MeasurementData data = new MeasurementData();
                int[,] tmpData = null;
                try
                {
                    String path = Directory.GetCurrentDirectory();
                    Parser parser = new Parser();
                    string root = ConfigurationManager.AppSettings["dataRoot"];
                    // root P:\PublicAT\ApplData\Elymat
                    tmpData = parser.getCurrentMeasurementMatrix(root + "\\8 Zoll\\192b291.elm", data);
                }
                catch (Exception e)
                {
                    String message = e.Message;
                }
    
                for (int x = 0; x < tmpData.GetLength(0); x++)
                {
                    for (int y = 0; y < tmpData.GetLength(1); y++)
                    {
                        data.SetData(x, y, tmpData[x, y]);
                    }
                }
                
                JsonResult retval = new JsonResult();
                retval.ContentEncoding = System.Text.Encoding.UTF8;
                retval.ContentType = "text/x-json";
                retval.Data = data;
    
                return retval;
            }

    Gruß,
    Marko


    • Bearbeitet mkeuschn Montag, 13. Februar 2012 11:33
    • Als Antwort markiert mkeuschn Montag, 13. Februar 2012 11:33
    Montag, 13. Februar 2012 09:05

Alle Antworten

  • Hallo Marko,

    es gibt verschiedene Möglichkeiten, dass zu realisieren.

    Am einfachsten ist es wohl, wenn du das Array direkt (natürlich in JS kompatibler Form) in die View schreiben lässt und so den Zugriff durch JS ermöglichst.

    Eine andere (meiner Ansicht nach elegantere) Methode ist, dass betreffende Array im JSON Format zurück zu liefern. Dazu schreibst du dir einfach eine Action, die als Return keine View sondern JSON Daten enthält (Siehe: http://msdn.microsoft.com/en-us/library/ie/dd470587.aspx). Auf diese Action kannst du dann bequem via XMLHTTP Request von deinem JS aus zugreifen.

    Wenn du ein wenig mehr zu deinem Projekt verraten kannst, lässt sich vielleicht noch eine elegantere Lösung finden.

    Gruß Sebastian

    Dienstag, 24. Januar 2012 16:23
  • Hallo Sebastian,

     

    Danke für die schnelle Antwort. Ich bin noch ganz am Anfang mit meinem Projekt. Ich muss mich auch noch in die Webentwicklung einarbeiten. Ich werd mir das mit JSON einmal anschauen. Vielleicht kennst du ja noch ein paar Tutorials für Anfänger die ich mir anschauen kann.

    Danke,

    Marko

    Mittwoch, 25. Januar 2012 08:08
  • Hallo Marko,

    ggfs. wäre es hier sinnvoll, sich mal jQuery.ajax anzuschauen. Über einen Webservice kannst Du problemlos komplexe Objekte in der JSON Notation übertragen (beide Richtungen).

    <Script.Services.ScriptMethod( ResponseFormat:=ResponseFormat.Json )> _
    Public Function GetRecords( ... ) As List( Of <DeineKlasse> )
    
    Dim Result As New List( Of <DeineKlasse> )
        Result.Add( New <DeineKlasse>( ... ) )
        Result.Add( New <DeineKlasse>( ... ) )
        ...
        
        Return Result
    
    End Function
    
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 25. Januar 2012 08:32
    Moderator
  • Hallo,

    So funktioniert jetzt die Übertragung auf beide Seiten :-). Danke für die Tipps.

    Client

    var jsonData = '{"measurementType": "diffusionCurrent", "filename": "test" }';
    
    jQuery.ajax({
                type: "POST",
                url: "/Home/Data",
                data: jsonData,
                contentType: "application/json",
                dataType: "json",
                success: function (result) {
                    // some actions with the data
                },
                error: function (error) {
                    alert("There was an error posting the data to the server: " + error.responseText);
                }

    Server

    [AcceptVerbs(HttpVerbs.Post)]
            public JsonResult Data(string measurementType, string filename)
            {
                MeasurementData data = new MeasurementData();
                int[,] tmpData = null;
                try
                {
                    String path = Directory.GetCurrentDirectory();
                    Parser parser = new Parser();
                    string root = ConfigurationManager.AppSettings["dataRoot"];
                    // root P:\PublicAT\ApplData\Elymat
                    tmpData = parser.getCurrentMeasurementMatrix(root + "\\8 Zoll\\192b291.elm", data);
                }
                catch (Exception e)
                {
                    String message = e.Message;
                }
    
                for (int x = 0; x < tmpData.GetLength(0); x++)
                {
                    for (int y = 0; y < tmpData.GetLength(1); y++)
                    {
                        data.SetData(x, y, tmpData[x, y]);
                    }
                }
                
                JsonResult retval = new JsonResult();
                retval.ContentEncoding = System.Text.Encoding.UTF8;
                retval.ContentType = "text/x-json";
                retval.Data = data;
    
                return retval;
            }

    Gruß,
    Marko


    • Bearbeitet mkeuschn Montag, 13. Februar 2012 11:33
    • Als Antwort markiert mkeuschn Montag, 13. Februar 2012 11:33
    Montag, 13. Februar 2012 09:05