JQuery Ajax和ASP.NET MVC3导致空参数

JQuery Ajax和ASP.NET MVC3导致空参数,jquery,ajax,asp.net-mvc-3,Jquery,Ajax,Asp.net Mvc 3,这个问题已经被问了很多次,但我发现没有一个解决方案是有效的。让我觉得这可能是一个新问题,可能是ASP.NET MVC 3特有的问题 我使用jQueryAjax对ASP.NETMVC3控制器进行简单调用。像这样 var addressInfo = { Address1: "423 Judy Road", Address2: "1001", City: "New York", State: "NY", ZipCode: "10301", Countr

这个问题已经被问了很多次,但我发现没有一个解决方案是有效的。让我觉得这可能是一个新问题,可能是ASP.NET MVC 3特有的问题

我使用jQueryAjax对ASP.NETMVC3控制器进行简单调用。像这样

var addressInfo = { 
    Address1: "423 Judy Road",
    Address2: "1001",
    City: "New York",
    State: "NY",
    ZipCode: "10301",
    Country: "USA" 
};

$.ajax({
    url: '/home/check',
    type: 'POST',
    data: JSON.stringify(addressInfo),
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function () {
        alert("success");
    },
    error: function () {
        alert("error");
    }
});
控制器看起来像这样

[HttpPost]
public ActionResult Check(AddressInfo addressInfo)
{
    // Do something and return Json(something)
}
这不起作用,尽管它应该基于Scottgu的“JavaScript和AJAX改进”部分

我尝试了许多不同的方法,例如:

var args = new Object();
args.addressInfo = { 
    Address1: "423 Judy Road",
    Address2: "1001",
    City: "New York",
    State: "NY",
    ZipCode: "10301",
    Country: "USA" 
};

$.ajax({
    url: '/home/check',
    type: 'POST',
    data: JSON.stringify(args),
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    success: function () {
        alert("success");
    },
    error: function () {
        alert("error");
    }
});
然后直接使用JSON对象执行上述两项操作:

$.ajax({
    url: '/home/check',
    type: 'POST',
    data: args,
    success: function () {
        alert("success");
    },
    error: function () {
        alert("error");
    }
});
没用。如果我只有一个传递给控制器的字符串,那就行了。但一旦我介绍了一个对象,我就无法让它工作

任何人都知道可能是什么问题


非常感谢您的关注

对我来说,问题似乎出在字符串中的字符,请尝试传递一个包含以下字符的简单字符串

{[,:"']}

我认为这也会失败,只需删除字符,直到它通过

您的代码看起来很好,应该可以工作。我刚刚在一个新的应用程序中测试了以下内容,没有出现任何问题

型号:

public class AddressInfo 
{
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public string Country { get; set; }
}
控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Check(AddressInfo addressInfo)
    {
        return Json(new { success = true });
    }
}
视图:


var ai={
地址1:“朱迪道423号”,
地址二:“1001”,
城市:“纽约”,
国家:“纽约”,
ZipCode:“10301”,
国家:“美国”
};
$.ajax({
url:“/home/check”,
键入:“POST”,
数据:JSON.stringify(ai),
contentType:'application/json;charset=utf-8',
成功:功能(数据){
警报(数据。成功);
},
错误:函数(){
警报(“错误”);
}
});

您好,您需要的是一个ValueProvider

您可以阅读有关ValueProviders和的信息

此ValueProvider使用默认的JavaScriptSerializer获取发布的Json并填充操作方法参数

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

您可以将该行添加到Global.asax.cs中,以便在应用程序启动时执行一次。您刚刚告诉默认模型绑定器将传入的Json绑定到模型。在内部,JsonValueProvider与UrlValueProvider一样只是一个字典值提供程序,只是它基于发布的Json构建字典。MVC团队的简洁实现。GJ MVC团队。

感谢您的上述回复,但示例并不完全正确。以下是客户端代码的外观:

        jQuery.ajax({
            url: '/Blogs/Update',
            type: "POST",
            data: JSON.stringify(blog),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (d) {
                if(d.success == true)
                    jQuery('#status').html('Blog saved');
                else
                    jQuery('#status').html('The server had some issues with the data');
            },

            error: function () {
                jQuery('#status').html('Ajax error occurred during the transmission.');

            }
        });
如您所见,success函数需要的是对象,而不是方法,因此前面响应中的代码会产生语法错误。上面的请求可以成功地通过ajax,但仍然会在服务器上生成错误。ajax中的error函数仅在传输过程中或服务器上发生错误时出现

服务器处理上述请求的方式如下(asp.net MVC 2或3):

谢谢


西红柿

我不知道为什么,但在我把它放进去之前,绑定对我不起作用。也许你没有使用ASP.NET MVC 3?看着你的答案,我意识到我所有的AddressInfo对象集都是私有的。改变这一点解决了问题。不幸的是,我没有得到这个问题的任何错误/指示。在我花了大部分时间的WCF世界中,私有集是可以的,但我想MVC不是这样的。非常感谢!
        jQuery.ajax({
            url: '/Blogs/Update',
            type: "POST",
            data: JSON.stringify(blog),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (d) {
                if(d.success == true)
                    jQuery('#status').html('Blog saved');
                else
                    jQuery('#status').html('The server had some issues with the data');
            },

            error: function () {
                jQuery('#status').html('Ajax error occurred during the transmission.');

            }
        });
    [Transaction]
    [HttpPost]
    public ActionResult Update(Blog blog)
    {
        if (ModelState.IsValid && blog.IsValid())
        {
            this.blogRepository.SaveOrUpdate(blog);
            return Json(new { success = true });

        }

        return Json(new { success = false });

    }