Jquery ajax发布到MVC2动作

时间:2010-07-15 07:19:42

标签: jquery asp.net-mvc json

我正在使用以下脚本发布到端点,它正在命中服务器上的断点,所以我知道路由是正确的。

$(document).ready(function () {
            var o = new Object();
            o.message = 'Hi from the page';
            $.ajax({
                type: 'POST',
                contentType: 'application/json;',
                data: JSON.stringify(o),
                dataType: 'json',
                url: 'home/PingBack',
                success: function (result) {
                    alert(result.success);
                }
            });
        });

服务器上的端点如下所示。

public JsonResult PingBack(MHolder message)
        {
            return Json(new { success = "steve"});
        }

,模型看起来像这样。

  public class MHolder
    {
        public string message { get; set; }
    }

我确信在过去,这些值已经自动绑定到模型上,但我似乎无法获得任何绑定的东西!即使我只是将值作为字符串传递,我确定这是一些愚蠢的事情,我错过了任何想法?

2 个答案:

答案 0 :(得分:2)

要注意的一些事情。您在服务器上发送请求作为JSON字符串(contentType: 'application/json'JSON.stringify(o)),而您希望类型为MHolder的对象。默认模型绑定程序不会执行此转换。您需要编写一个能够将JSON反序列化回MHolder实例的自定义模型绑定器,或者将请求发送为key=value对(不要字符串化):

var o = new Object();
o.message = 'Hi from the page';
$.ajax({
    type: 'POST',
    data: o,
    dataType: 'json',
    url: 'home/PingBack',
    success: function (result) {
        alert(result.success);
    }
});

答案 1 :(得分:0)

乍一看,代码对我来说似乎没问题。

尝试使用...

data : {message : "Hi from the page."},

...查看是否会导致填充MHolder实例。

此外,使用类似Fiddler的内容来捕获您的请求,并让您准确查看发布的内容。