我试图在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)时,它完全没有响应,但我已经验证它在后台成功完成所有操作,除了重定向。
有人知道这个伎俩吗?非常感谢。
答案 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>
以下是此解决方案的问题:
return Content
似乎将较少的数据发送回客户端,因为我只使用一个数据......?此行为现在按需要/预期工作。但是,因为我还不知道自己在做什么,而且因为我并不真正理解从客户端到服务器的整个事件链(即行为),所以我希望我能回到这一点。指出并更好地了解该怎么做以及清理它...随意评论。我不是没有安全感,也不容易被冒犯或试图成为这个网站上最聪明的人,所以请随意撕碎。感谢。