Я обнаружил пару проблем, связанных с вызовами MVC ajax GET с помощью JQuery, которые вызвали у меня головные боли, поэтому здесь обсуждались решения.
JsonRequestBehavior.AllowGet
; без этого MVC возвращал ошибку HTTP 500 (с dataType: json
, указанным на клиенте). cache: false
в вызов $ .ajax, иначе вы в конечном итоге получите HTTP 304 ответов (вместо HTTP 200 ответов), и сервер не будет обрабатывать ваш запрос. Пример JQuery:
$.ajax({
type: 'get',
dataType: 'json',
cache: false,
url: '/MyController/MyMethod',
data: { keyid: 1, newval: 10 },
success: function (response, textStatus, jqXHR) {
alert(parseInt(response.oldval) + ' changed to ' + newval);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error - ' + errorThrown);
}
});
Пример кода MVC:
[HttpGet]
public ActionResult MyMethod(int keyid, int newval)
{
var oldval = 0;
using (var db = new MyContext())
{
var dbRecord = db.MyTable.Where(t => t.keyid == keyid).FirstOrDefault();
if (dbRecord != null)
{
oldval = dbRecord.TheValue;
dbRecord.TheValue = newval;
db.SaveChanges();
}
}
return Json(new { success = true, oldval = oldval},
JsonRequestBehavior.AllowGet);
}