对于RedirectToAction' RedirectToAction'什么时候使用AJAX POST? (ASP.NET)

时间:2017-03-10 15:02:14

标签: javascript jquery ajax asp.net-mvc

我是学习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),那么表现会更好,并照顾教授的问题。在说什么?

2 个答案:

答案 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代码),因此根本不在客户端处理响应