У меня есть страница входа, которая использует форму Ajax. В вызываемом действии я хочу перенаправить на другой контроллер / действие, основываясь на некоторых критериях. На данный момент я не беспокоюсь об этом, а просто пытаюсь заставить Redirect работать.
Это кажется сложным из-за ActionFilterAttribute:
public class AjaxAwareRedirectAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var result = filterContext.Result as RedirectResult;
if (result != null && filterContext.HttpContext.Request.IsAjaxRequest())
{
string destinationUrl = UrlHelper.GenerateContentUrl(result.Url, filterContext.HttpContext);
filterContext.Result = new JavaScriptResult()
{
Script = string.Format("window.location = '{0}';", destinationUrl)
};
}
}
}
Это срабатывает после контроллера страницы входа призывы к действию
return RedirectToAction("Index", "TwoFactorAuthentication");
Перенаправление игнорируется, а страница входа вновь отображается.
Атрибут AjaxAwareRedirectAttribute используется во многих местах по всему сайту, поэтому мне нужно быть осторожным с чем (если что-нибудь ) Я делаю к этому.
Если я использую простое
return Redirect("/en/authentication");
Тогда это, кажется, работает нормально. Однако я также хотел бы передать данные модели следующим образом:
return RedirectToAction("Index", "TwoFactorAuthentication", member);
Теперь я не уверен, что я нахожусь близко и на правильном пути, или совершенно не прав!
Это проект Umbraco 7, если он имеет какое-либо отношение к нему.
Редактировать:
Нужно ли вместо этого обнаруживать / обрабатывать перенаправление на стороне клиента?
Это Ajax форма
@using (Ajax.BeginForm("Login", "LoginSignup", null, options, null))
Это параметры
var options = new AjaxOptions
{
HttpMethod = "POST",
OnFailure = "ShowError",
OnSuccess = "ShowSuccess",
UpdateTargetId = "target1",
InsertionMode = InsertionMode.Replace
};
и связанный скрипт
<script>
function ShowError(response) {
$("#feedback").show();
$("#signupfeedback").show();
$("#status").html("@Umbraco.Field("#Login.ScriptErrorPostingForm")");
}
function ShowSuccess(response, textStatus, xhr) {
if (xhr.responseText.indexOf('window') == -1) {
$("#feedback").show();
$("#signupfeedback").show();
$(".validation-summary-errors").hide();
}
}
function ShowExternalLoginError() {
$("#status").removeClass();
$("#status").addClass("b_noteList");
$("#status").html("@Umbraco.Field("#Login.ScriptErrorOccurred")");
}
</script>