有没有办法通过一个“C#”对象通过AJAX控制器?

问题描述:

这是很简单的传递一个字符串到通过jQuery AJAX控制器动作,但有可能连载一组变量成一个对象,它发送到控制器,并有控制其识别为一个对象?有没有办法通过一个“C#”对象通过AJAX控制器?

例如:

在服务器中,你有一个类的OBJ这样:

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

而在控制器,你有期待一个OBJ对象

public JsonResult UpdateObj(Obj obj){ 
    //stuff 
} 
的方法

有jQuery的办法序列化一些JavaScript瓦尔成类的OBJ,然后通过一个AJAX后发送到MVC控制器动作?

+1

它已经内置到MVC 3,JSON请求只需要匹配您'Obj'属性和modelbinders将绑定的值给你。 – Buildstarted

当然,让我们假设你有一个强类型的视图:

@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> 

,并在控制器动作:

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

只是一个关于这个的OBJ此言一出,使其具有公共属性,而不是某些字段:

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

...然后你反序列化的控制方法,与... –

+1

@Robert哈维,什么也没有,ASP.NET MVC 3不适合您。 –

+0

整个Html.Raw看起来坚实,但我得到的语法错误,当我编码模式。 –

的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

不需要反序列化。 application/json contentType通过动态序列化器告诉MVC匹配JSON对象和.NET对象 - System.Web.Services.Script.JavaScriptSErializer类 – Jonathan