MVC RedirectToAction在JQuery / Ajax Post之后不起作用

时间:2014-05-27 15:33:27

标签: jquery ajax asp.net-mvc

我的控制器中有以下MVC 5操作

控制器

public ActionResult Nominations(int id, string feedback)
{
   //code here
}

此操作的Razor视图包含一个隐藏文本框。当用户点击模态确认框上的提交按钮时,会调用一个JQuery函数,该函数包含一个AJAX调用,用于获取隐藏文本框中的值,然后将其传递给我的MVC控制器中的Action。

JQuery的

$("#mySubmit").click(function () {

    $.ajax({
        type: "POST",
        url: "/MyController/Delete/",
        data: { userID: $("#hiddenID").val() },
        success: function (result) {
            $('#myModal').modal('hide');
        },
        error: function (result) {
            alert('error');
        }
    });

});

控制器

[HttpPost]
public ActionResult Delete(int userID)
{
   var user = _userService.GetUserByID(userID);

   if(!String.IsNullOrEmpty(user.userID))
   {
      _userService.Delete(userID);
      _userService.Save();
   }

   return RedirectToAction("Index", new { id = userID, feedback = "Deleted" });
}

public ActionResult Index(int userID, string feedback)
{
    //code here
}

将值传递给Controller中的Delete Action,执行删除功能(删除记录),然后将userID和feedback参数传递给Index Action。

这就是问题所在,虽然删除功能发生了,我可以看到传递给索引操作的参数(用户ID和反馈),然后显示给用户的视图不会改变,即用户虽然我在调试时看到正在执行的代码,但是应用程序仍保留在提名视图中,因此不会重定向到索引视图。

为什么会这样?我需要将用户重定向到索引视图。

此外,我用JQuery函数代替AJAX调用,用一个更简单的JQUery Post替换它

$.post("/MyController/Delete/", { userID: $("#hiddenID").val() });

但问题是,在发生删除后,模态弹出窗口不会关闭。

对此的任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:3)

因为您正在执行AJAX请求,所以它不会在成功时重新加载用户的浏览器页面,它只会返回在result参数中调用的action方法的结果。此外,$.post只是$.ajax的简写版本,因此行为将是相同的(模式不会因为您未提供成功回调而发生变化)。

如果您想要在成功时加载其他视图,可以在window.location成功回调中使用$.ajax

答案 1 :(得分:3)

您需要执行以下操作:

$("#mySubmit").click(function () {

$.ajax({
    type: "POST",
    url: "/MyController/Delete/",
    data: { userID: $("#hiddenID").val() },
    success: function (result) {
        $('#myModal').modal('hide');
        window.location.href 
        = "@Url.Content("~/controllername/Index")" 
         +"?id="+userID+"&feedback=Deleted";
    },
    error: function (result) {
        alert('error');
    }
});

});