在Ajax期间从控制器重定向.Actionlink调用

本文关键字:重定向 Actionlink 调用 控制器 Ajax | 更新日期: 2023-09-27 18:00:47

我试图在Ajax过程中从控制器重定向。Actionlink调用。我有一个Ajax。类似的Actionlink:

@Ajax.ActionLink("Send a Project",
                 "RegisterAjax", "Projects",
                 new {id = Model.IncidentId},
                 new AjaxOptions {HttpMethod = "POST", UpdateTargetId = "Projectmsg_" + Model.IncidentId})

然后在我的控制器中,我有以下内容:

public ActionResult RegisterAjax(int id = 0)
        {
            string result = RegisterProject(id);
            if (result != null)
            {
                return RedirectResult(result);
            }
            return Content("Sent...");
        }
private ActionResult RedirectResult(string result)
        {
            throw new NotImplementedException();
        }

If result != null,我已经尝试了上面的,return Redirect(result)return View(result)等,但没有什么能让我进入重定向的结果页面(例如~/Views/Manage/Location.cs.html)。我已经验证了结果实际上是在返回路径(通过在return Content(result)中返回)。然而,当我点击超链接(即Ajax.Actionlink)时,它完全没有响应,但我已经验证了它在后台成功地完成了除重定向之外的所有操作。

有人知道这个把戏吗?非常感谢。

在Ajax期间从控制器重定向.Actionlink调用

听起来您不需要AJAX,您最好使用带有POST操作的普通HTML表单。您应该能够在处理POST的Action中重定向。你认为在这种情况下需要AJAX有什么理由吗?

根据上面对Stephen的评论,我想做的似乎是不可能的(正如我之前想象的那样)。因此,我"不想再花几天时间在这个问题上"的解决方案是基于Darin的回答:

从ASP的Ajax中获取JSonResult。ActionLink

我基本上改变了我的Ajax。指向Html的操作链接。Actionlink(我这样做是因为Darin推荐它,但也因为我可以在控制器中使用重定向,尽管我根本没有在那里使用它):

    @Html.ActionLink("Send a Project", "RegisterAjax", "Projects", 
            new { Id = Model.IncidentId }, 
            new { id = "sendaproject_" + Model.IncidentId })

我删除了控制器中的if语句(因为在实现js时它停止了工作),并将返回结果更改为json(主要是因为我没有幸运地将return Content数据放入js中):

return Json(new { jsonResult = result }, JsonRequestBehavior.AllowGet);

然后,我添加了以下javascript来处理我想要的行为:

    <script type="text/javascript">
    $(function() {
        $('#sendaproject_@Model.IncidentId').click(function() {
        $.post(this.href, function(json) {
            if (json.jsonResult === null) {
                $("#projectmsg_@Model.IncidentId").html("Sent...");
            } else {
                window.location.href = json.jsonResult;
            }
            //alert(json.jsonResult);
        });
        return false;
    });
});
</script>

以下是我对此解决方案的问题:

  1. 我真的不明白为什么我一开始实现javascript,控制器中的重定向就停止了工作。控制器中有重定向似乎更干净
  2. javascript直接位于每个Html之后。Actionlinkdiv是因为我想不出如何清理它,因为每个块都有一个唯一的id。我想我需要命名我的js函数并将id传递给它
  3. return Content似乎会减少发送回客户端的数据,因为我只使用了一段数据

行为现在按要求/意图进行。但是,由于我还不知道自己在做什么,也不真正了解从客户端到服务器的完整事件链(即行为),我希望在某个时候能回到这一点,更好地知道该做什么,并稍微清理一下。。。欢迎发表评论。我并不缺乏安全感,也不容易被冒犯,也不想成为这个网站上最聪明的人,所以请放心。谢谢