我正在開發一個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