JQuery Ajax和ASP.NET MVC3导致空参数
这个问题已经被问了很多次,但我发现没有一个解决方案是有效的。让我觉得这可能是一个新问题,可能是ASP.NET MVC 3特有的问题 我使用jQueryAjax对ASP.NETMVC3控制器进行简单调用。像这样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
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 });
}