2011-07-20 10 views
5

Jest to dość proste, aby przekazać ciąg do akcji kontrolera za pośrednictwem jQuery ajax, ale czy można serializować grupę zmiennych do obiektu, wysłać do kontrolera i czy kontroler rozpoznaje go jako obiekt?Czy istnieje sposób przekazywania obiektu "C#" do kontrolera za pośrednictwem AJAX?

Na przykład:

W serwerze, masz klasę OBJ jako takie:

class Obj{ 
    string a; int b; double c; 
} 

iw sterowniku, masz metodę, która spodziewa się obiektu OBJ

public JsonResult UpdateObj(Obj obj){ 
    //stuff 
} 

Czy istnieje sposób w Jquery do serializacji niektórych vars JavaScript do klasy Obj, a następnie wysłać go do działania kontrolera MVC za pośrednictwem postu AJAX?

+1

Jest już wbudowany w MVC 3. Żądanie JSON musi tylko dopasować właściwości w twoim 'Obj', a modelbinders zwiąże wartości dla ciebie. – Buildstarted

Odpowiedz

9

Jasne, załóżmy, że masz silnie wpisany widok:

@model Obj 

<script type="text/javascript"> 
    // Serialize the model into a javascript variable 
    var model = @Html.Raw(Json.Encode(Model)); 

    // post the javascript variable back to the controller 
    $.ajax({ 
     url: '/home/someAction', 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.serialize(model), 
     success: function(result) { 
      // TODO: do something with the results 
     } 
    }); 
</script> 

i działania kontrolera:

public ActionResult SomeAction(Obj obj) 
{ 
    ... 
} 

Tylko uwaga o tym obj, sprawiają, że mają właściwości publiczne zamiast niektóre pola:

public class Obj 
{ 
    public string A { get; set; } 
    public int B { get; set; } 
    public double C { get; set; } 
} 
+0

... a następnie deserializować go w sposób kontrolera, z ... –

+1

@Robert Harvey, bez niczego, ASP.NET MVC 3 robi to za Ciebie. –

+0

Cały plik Html.Raw wygląda solidnie, ale podczas kodowania modelu pojawiają się błędy składni. –

0

jQuery :::

.ajax{ 
    type: "POST", 
    url: "yourUrl/UpdateObj", 
    data: $("someHTMLForm").serialize(), 
    contentType: "application/json; charset=utf-8" 
    success: function(data){ 
      //data will house your JsonResult 
    } 
} 
+0

Nie trzeba deserializować. application/json contentType mówi MVC, aby pasował do obiektu JSON z twoim obiektem .NET za pomocą dynamicznego serializera - klasy System.Web.Services.Script.JavaScriptSErializer – Jonathan

Powiązane problemy