【发布时间】:2015-03-13 04:56:55
【问题描述】:
我正在尝试做的事情可能吗?似乎应该如此。 我希望看到 MyActionMethod 继续使用新的 url,但它最终会再次被调用。
我已对此进行了简化以深入了解其本质。我的操作方法是从带有 Ajax.BeginForm() 的视图中调用的,一旦提交,我会看到它在控制器中到达这里。
public ActionResult MyActionMethod(MyViewModel myViewModel)
{
isRedirectNeeded = true;
return RedirectIfNeeded(isRedirectNeeded)
}
我的方法来确定重定向到哪里。我有一个方法,因为它被调用了几次,并且比本示例中的目的地更多。
private ActionResult RedirectIfNeeded(bool isRedirectNeeded)
{
if (isRedirectNeeded)
{
return Redirect(@"~/myController/MyMethod");
}
else
{
return Json("<div class='alert alert-error'>" + errorMessage + "</div>");
}
}
我可以单步调试调试器,观察它转到 MyActionMethod,跳转到 redirectIfNeeded 方法,找出要使用的正确重定向 url,然后返回。但我没有转到新的 url,而是回到了 MyActionMethod。这是怎么回事?
我不允许发布实际代码。
新信息:我通过 MyActionMethod 中的返回,看到它进入 global.asax 并点击:(它足够通用,我正在发布实际代码)
protected void Application_EndRequest()
{
var context = new HttpContextWrapper(Context);
if (context.Request.IsAjaxRequest() && context.Response.StatusCode == 302)
{
Context.Response.Clear();
Context.Response.Write("**custom error message**");
Context.Response.StatusCode = 401;
}
}
我现在正在谷歌上搜索,但想把这些信息发布出来,这样你们就可以了解我所做的所有信息
答案在上面重复评论中提到的问题中。
【问题讨论】:
-
在使用ajax时不能这样重定向,需要将url作为json返回并使用javascript重定向
-
我相信在这种情况下发送 http 状态代码并在 javascript 中进行相应的行为是很好的做法。 stackoverflow.com/a/20975397/1505865
-
感谢@Erik Funkenbush,当我第一次写这个问题时,我没有意识到这是一个AJAX问题。
标签: c# asp.net-mvc