![](/img/trans.png)
[英]RedirectToAction is not working with Tempdata - ASP.net core MVC
[英]ASP.NET Core MVC RedirectToAction isn't working
我已經看到很多關於這個問題的問題,但沒有一個能解決我的問題。
我的問題:我的重定向操作方法命中了我被重定向到的方法,但視圖保持在同一頁面上,它永遠不會更改為重定向的頁面。
從我的Index.chstml
我正在創建一個局部視圖。
從使用 AJAX 的部分視圖來看,我正在向我的 controller 提交請求。 AJAX 代碼如下
$.ajax({
method: 'POST',
url: "/Home/SubmitTest",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(arr),
success: function (response) {
}
});
我的 controller 代碼在這里。 我正在從 AJAX 方法接收數據並執行一些工作。 最后,我試圖將用戶重定向到另一種方法。
[HttpPost]
public IActionResult SubmitTest([FromBody] List<TestSubmitViewModel> data)
{
// Rest of the code goes here
return RedirectToAction(nameof(PipelineList));
}
我重定向到的方法如下。 兩種方法都在同一個 controller 中。 重定向后,我遇到了這種方法。 但我的觀點仍然停留在之前的 URL 即
https://localhost:44339/Home/Index
但它應該重定向到
https://localhost:44339/Home/PipelineList
代碼:
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> PipelineList()
{
List<PipelineViewModel> itemList = new List<PipelineViewModel>();
/// my other code goes here
return View(itemList);
}
注意:當我直接從 UI 使用此操作方法時,我的PipelineList()
工作正常。 我在這里做錯了什么,我該怎么做才能重定向到 URL?
我正在使用 .NET Core 5。
這是我來自StartUp.cs
的路由信息:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action="SignIn"});
});
更新謝謝你們指出我遇到的問題。 我必須使用 AJAX 從 UI 傳遞選定的值(來自 JS 創建的表)。
最后,我通過更改我的 Controller 和 AJAX 代碼使其工作。
更新了 Controller:
[HttpPost]
public async Task<JsonResult> SubmitTest([FromBody]
List<TestSubmitViewModel> data)
{
try
{
// my codes goes here
return Json(new {StatusCode = statusCode });
}
catch (Exception)
{
return Json(new {StatusCode = 500 });
}
}
更新了 AJAX:
$.ajax({
method: 'POST',
url: "/Home/SubmitTest",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(arr),
success: function (response) {
if (response.statusCode == 200) {
var url = "/GitLab/PipelineList";
window.location.href = url;
} else {
alert("error");
}
}
});
我知道這可能不是最好的解決方案,但就目前而言,它確實有效。 非常感謝@Sergey 和@Filipe
正如@Sergey 所說,您為 ajax 使用了錯誤的前輩。 Ajax 通常用於當您想要更新部分頁面而不是刷新整個頁面以提高客戶體驗和頁面加載速度時。 如果要重定向到另一個頁面並且沒有其他特定原因,則無需使用ajax。
您會發現 ajax 服務器已將正確的 302 重定向返回到客戶端並重定向到新頁面:
正確的方法是直接重定向到新頁面,如下所示:
<form asp-action="SubmitTest" asp-controller="Home" method="post">
@*Other input value you want to submit*@
<input type="submit" value="Click"/>
</form>
結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.