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

时间:2015-07-01 22:12:30

标签: c# ajax asp.net-mvc

我试图在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 .cshtml)。我已经验证结果实际上是返回路径(通过在return Content(result)中返回)。但是,当我点击超链接(即Ajax.Actionlink)时,它完全没有响应,但我已经验证它在后台成功完成所有操作,除了重定向。

有人知道这个伎俩吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

听起来你不需要AJAX,你可能最好使用普通的HTML表单和POST动作。您应该能够在处理POST的Action中重定向。您是否认为在这种情况下需要AJAX?

答案 1 :(得分:0)

根据上面与斯蒂芬的评论,看起来我想做的事情是不可能的(正如我之前想象的那样)。因此,我“不想再多花几天时间”这个解决方案是基于Darin的回答:

Getting JSonResult from ASP's Ajax.ActionLink

我基本上将我的Ajax.Actionlink更改为Html.Actionlink(我之所以这样做是因为Darin推荐它,但也因为我可以在控制器中使用我的Redirect,尽管毕竟不在那里使用它):

    @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.Actionlink div之后,因为 我无法想到如何清理它,因为每个块都有唯一的ID。我猜我需要命名我的js函数并将id传递给它?
  3. return Content似乎将较少的数据发送回客户端,因为我只使用一个数据......?
  4. 此行为现在按需要/预期工作。但是,因为我还不知道自己在做什么,而且因为我并不真正理解从客户端到服务器的整个事件链(即行为),所以我希望我能回到这一点。指出并更好地了解该怎么做以及清理它...随意评论。我不是没有安全感,也不容易被冒犯或试图成为这个网站上最聪明的人,所以请随意撕碎。感谢。