С AJAX вы не выполняете перенаправление на стороне сервера, вы выполняете его на стороне клиента после получения результата. Примерно так:
Http.onreadystatechange = (e) => {
if(xhr.readyState === 4 && xhr.status === 200) {
window.location.href = '@Url.Action("Index", "Startup")';
} else {
// non-success reaponse? do something else?
}
}
Приведенный выше код перенаправляет после успешного ответа AJAX. Обратите внимание, что этот код JavaScript должен быть в самом представлении, чтобы использовать помощник Url.Action()
. Если код JavaScript находится в отдельном файле, одним из вариантов может быть возврат в виде строки в ответе AJAX URL-адреса, на который вы перенаправляете.
Обратите внимание, что то, что вы делаете , немного отличается здесь:
this.ViewData["Result"] = Handle;
Я могу ошибаться, но я подозреваю, что не перенесет на перенаправление. TempData
может ? Но в конечном итоге возникает вопрос ... Что именно вы пытаетесь достичь? Вы отправляете значение на сервер, а затем пытаетесь перенаправить пользователя на другую страницу, чтобы включить это значение. Итак, клиент уже знает это значение, и, поскольку это AJAX, клиенту необходимо выполнить перенаправление, поэтому вообще необходима эта операция AJAX?
Мне не совсем ясно, какова общая цель, и я подозреваю, что общая установка может быть значительно упрощена. Но похоже, что AJAX здесь нужен вообще. Вы можете вернуть свой серверный код для выполнения перенаправления и вместо использования AJAX просто перенаправить клиент на это серверное действие полностью:
window.location.href = '/Startup/Action/Test';
или
winfow.location.href = '@Url.Action("Action", "Startup", new { Handle = "Test" })';
А затем перенаправьте действия на стороне сервера, как вы изначально пытались:
[HttpGet("Startup/Action/{Handle}")]
public IActionResult Action(string Handle)
{
this.ViewData["Result"] = Handle;
return RedirectToAction("Index", "Startup");
}
Это все еще возможно, и снова я не уверен, что ViewData
здесь не правильно, и вы можете использовать TempData
при перенаправлении. Хотя, опять же, в равной степени вероятно, что все, что вы пытаетесь достичь, может быть сделано в первую очередь более эффективно. Например, пропустить этот метод действия Action
полностью и просто передать значение Handle
непосредственно в действие Index
, независимо от того, что оно делает с этим значением.