我正在开发一个web应用程序,ASP.Net MVC 4.0与entityframework 6.0,试图根据用户选择更新数据库。使用jQuery AJAX将数据发送到控制器的操作。下面给出的是C#代码来更新实体,然后更新数据库。jQuery AJAX总是执行错误:{}
public void modidyProduct(Productdetail prodData)
{
try
{
using (SampleTrialEntities entity = new SampleTrialEntities())
{
var data = entity.Productdetails.Where(p=>p.ProductID == prodData.ProductID).FirstOrDefault<Productdetail>();
data.ProductName = prodData.ProductName;
data.ProductNumber = prodData.ProductNumber;
data.CategoryName = prodData.CategoryName;
data.ModelName = prodData.ModelName;
entity.Entry(data).State = System.Data.Entity.EntityState.Modified;
entity.SaveChanges();
}
}
catch (Exception)
{}
}
而这里的jQuery AJAX调用该控制器的操作方法。
function updateProduct() {
var productData = {
ProductName: $('#prodName').val().trim(),
ProductNumber: $('#prodNum').val().trim(),
CategoryName: $('#ctgryName :selected').text(),
ModelName: $('#mdlName :selected').text(),
ProductID: atob($('#editProductId').val())
};
debugger;
$('#divLoader').show();
$.ajax({
url: '@Url.Action("modidyProduct", "Home")',
data: JSON.stringify(productData),
type: 'POST',
dataType: 'json',
contentType: 'application/json;charset=utf-8',
success: function (jqXHR) {
//Below line will destroy DataTable - tblProducts. So that we could bind table again. next line - loadData();
$('#tblProducts').DataTable().destroy();
$('#divLoader').hide();
loadData();
$('#addModal').modal('hide');
$('#editProductId').val('');
},
error: function (msg) {
debugger;
$('#editProductId').val('');
$('#divLoader').hide();
alert(msg);
alert("What's going wrong ?");
//alert(jqXHR.responseText);
}
});
}
执行的jQuery AJAX方法&控制器动作后,成功更新数据库中的记录。响应状态代码 - 200 &状态 - 返回OK。但只有错误:{},代码块每次都在AJAX方法中执行。 Debugging screen capture with status-OK; statuscode - 200
谢谢@Shyju,感谢您的回复。这个详细的解释对于像我这样的新手来说确实很有帮助。从你的评论,我推断 - contentType:'application/json; charset = utf-8'用于通知服务器它将以'json'的形式接收参数作为请求。 dataType:'json'将准备浏览器来解析'json'数据作为响应。 @Shyju - 评论,如果我总结这是正确的。 –
是的。服务器使用内容Type标头,jquery使用dataType来处理响应 – Shyju