我是学习jQuery,Json,Ajax的新手。我正在尝试清楚地理解这些概念,但是有点困难。
我有一个正在运行的ajax POST Delete方法,但是我的教授。已经让我重构控制器中的代码以提高整体性能。
这是我在控制器
中的删除// POST: Course/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Course course = courseService.GetCourseByID(id);
courseService.DeleteCourse(id);
return RedirectToAction("Index");
}
我的ajax
电话
$('#dialog-box').on("click", '#confirm-del', function () {
var token = $('input[name="__RequestVerificationToken"]').val();
var data = { id: id, __RequestVerificationToken: token };
$.ajax({
type: "POST",
url: "@Url.Action("Delete","Course")",
data: data,
//ajaxasync: true,
success: function () {
$("#dialog").dialog("close");
$('div.table-content').empty().load('.table-content');
//console.log("success");
},
error: function () {
console.log("failed");
}
});
});
我的教授。评论说 " 删除发布ajax调用重新加载页面或转到ajax?看起来它重新加载。更改ajax中某些元素的颜色以确认它进入ajax调用。这是不必要的,如果你在ajax返回后有更多的逻辑,你就不能做任何事情,因为你刚刚重新加载页面。"
这是在要求澄清该怎么做之后,因为我无法完全理解这个问题。
如果我只是return View()
而不是return RedirectToAction (Index)
,那么表现会更好,并照顾教授的问题。在说什么?
答案 0 :(得分:1)
你的教授是对的。如果您打算通过Ajax调用该Action方法,则不应使用RedirectToAction。
相反,您需要返回 JsonResult 。例如,
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Course course = courseService.GetCourseByID(id);
courseService.DeleteCourse(id);
return Json("Course was deleted successfully.");
}
仅供参考:如果您确实需要在极少数情况下重定向到Ajax调用中的不同页面,可以使用JavaScriptResult。
答案 1 :(得分:0)
return RedirectToAction("Index");
返回HTTP状态302,其中包含重定向的URL(主页/索引)。
由于您未在ajax处理程序中处理此HTTP状态(成功处理2XX代码以及错误4XX和5XX代码),因此根本不在客户端处理响应