1
好的,我有一點麻煩,我以前沒有見過,它實際上不可重現。我有一個文本框,它接受一個數字,然後是一個按鈕,按下時會執行ajax調用。這在我的控制器中調用一個動作,然後用文本框中的值更新數據庫。問題是調試時有時會起作用,而其他時間則不起作用。您可以在控制器中的操作中放置一箇中斷點,但它並不總是被打中,但即使未調用該操作,仍會執行來自ajax的成功調用。通常它在調試器啓動後的前幾次都會運行,但是它會停止,刷新頁面並不重要。我在Chrome或Visual Studios中看不到任何錯誤。我也試着看看我能否在Intellitrace中找到某些東西,但沒有運氣。AJAX並不總是調用控制器的動作,但總是處理成功
這是我的行動:
[HttpPost]
public JsonResult UpdateIncremental(int QueryID, int? Incremental)
{
Datamart_MedsDBContext DBContext = new Datamart_MedsDBContext();
ss_Queries query = DBContext.ss_Queries.FirstOrDefault(m => m.QueryID == QueryID);
query.IncrementalLookBack = Incremental;
query.UpdatedBy = "CHMCCORP\\" + Session["UserName"].ToString();
query.UpdatedOn = System.DateTime.Now;
DBContext.ss_Queries.Attach(query);
DBContext.Entry(query).State = System.Data.Entity.EntityState.Modified;
DBContext.SaveChanges();
return Json(true, JsonRequestBehavior.AllowGet);
}
查看:
<input type="text" id="Incremental" value="@ViewBag.Incremental" />
<input id="editIncremental" type="button" name="editIncremental" value="Update" />
阿賈克斯:
$("#editIncremental").on("click", function() {
var reg = /(^$)|(^[0-9]*$)/;
var incremental = $('#Incremental').val();
var valid = reg.test(incremental);
var queryID = "@Session["QueryID"]";
if (!valid) {
alert("The incremental load must be a number!");
} else {
$.ajax({
type: "POST",
url: '@Url.Action("UpdateIncremental", "Home")',
data: {
QueryID: queryID, Incremental: incremental
},
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data == true) {
alert('Incremental Lookback has been updated!')
//window.location.reload();
}
else {
alert('There is some error');
}
}
});
}
});
我知道,這將是因爲它不可重複且不能保證。我只是在尋找一個正確的方向。
需要在設置'contentType:'application/json時對數據進行串聯化處理。 charset = utf-8'',否則jQuery將uri編碼它 – charlietfl
沒有運氣。但其他阿賈克斯調用正常工作,並沒有這個問題。 –
聽起來像你的AJAX正在緩存。嘗試在''.ajax'調用中添加'cache:false'選項。 –